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