1 Wire STM32
Tomáš Hamouz
hamouz na divesoft.cz
Úterý Červenec 23 16:51:00 CEST 2013
Máte tam pull-up odpor na té 1wire sběrnici?
Interní pull-up na to nestačí, je potřeba 4k7, pro parazitní napájení
obvodu je potřeba ještě i možnost tvrdého připojení na +.
A jak už psal wek, aby šlo něco přečíst, musíte nastavit výstup na 1.
Tomáš
> Tak stejně asi dělám něco špatně (senzor AM2302, napájení čidla je
> na Discovery F0 připojené na 5V, SDA na PA3). Ow_reset mi vždy vrátí
> 0 (což by odpovídalo poslednímu přikazu GPIO_ResetBits) a je jedno
> jestli je čidlo připojené nebo odpojené.
> http://meteobox.tk/files/AM2302.pdf
> Postup dle PDFka:
> - nahodím SDA, počkám těch cca 50ms
> - shodím, počkám Tbe (10ms)
> - nahodím, počkám Tgo (100us)
> - shodím, počkám Trel (120us - 80+40)
> - přečtu stav Treh
> void ow_init(void)
> {
> RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
> GPIO_StructInit (&GPIO_InitStructure);
> GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
> GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
> GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
> GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
> GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
> GPIO_Init(GPIOA, &GPIO_InitStructure);
> }
> uint8_t ow_reset(void)
> {
> uint8_t presence;
> GPIO_SetBits(GPIOA,GPIO_Pin_3);
> delay_ms(50); // počkat až čidlo po zapnutí napájení naběhne, nevím zda je to nutné...
> GPIO_ResetBits(GPIOA, GPIO_Pin_3);
> delay_ms(10);
> GPIO_SetBits(GPIOA,GPIO_Pin_3);
> delay_us(100);
> GPIO_ResetBits(GPIOA, GPIO_Pin_3);
> delay_us(120);
> presence = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3);
> return presence;
> }
Další informace o konferenci Hw-list