HAL DS18B20 problem z odbiorem danych

Wszystko o co chcesz zapytać na temat mikrokontrolerów ARM firmy STMicroelectronics: problemy z pisaniem programu, problemy sprzętowe, niejasności w DS czy AN itp.
StaryAnoda

HAL DS18B20 problem z odbiorem danych

Postautor: StaryAnoda » środa 14 gru 2016, 19:59

Hej

Mam problem
Mam zestaw z mikrokontroler F103R8T6
Napisałem bibliotekę do odbioru temperatury z czujnika DS18B20 przy taktowaniu 64MHz wszystko działa poprawnie:

Widok z programu STM32Cube:
Screenshot (54).png


Widok z analizatora stanów logicznych:
Screenshot (55).png

Screenshot (56).png


Przy taktowaniu 8MHz otrzymuję same zera czyli temperaturę: 4095.938
Widok z programu STM32Cube:
Screenshot (57).png


Widok z analizatora stanów logicznych:
Screenshot (59).png


Funkcja odbierająca dane wygląda tak w programie z taktowaniem 64MHz

Kod: Zaznacz cały

uint8_t One_Wire_Read_Bit(void)
{
   uint8_t Bit = 0;

   ONE_WIRE_OUTPUT();
   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_RESET);
   Delay_us(1);
   ONE_WIRE_INPUT();
   Delay_us(1);

   if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_10) == GPIO_PIN_SET)
   {
      Bit = 1;
   }
   else
   {
      Bit = 0;
   }
   Delay_us(35);

   return Bit;
}


Czy może mi ktoś podpowiedzieć w jaki sposób dopasować czasy dla 8MHz ?
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: HAL DS18B20 problem z odbiorem danych

Postautor: Antystatyczny » czwartek 15 gru 2016, 19:42

Domyślam się, że Delay_us() to funkcja. w związku z tym proponuję przez chwilke pomyśleć w taki sposób, w jaki działa typowy MPU. Wykonuje się jakiś kawałek kodu i nagle natrafia na skok do funkcji Delay_us(1). Należy porzucić obecne zadanie, skoczyć do funkcji oraz przekazać parametr (pewnie przez rejestr), następnie wyłączyć przerwania, ustawić timer oraz włączyć odliczanie. Następnie jest sprawdzanie, czy timer skończył liczyć do zera. Wyjście z funkcji i przywrócenie poprzedniego "ładu". Mniej więcej się zgadza, prawda? A teraz zmieść to wszystko w 8 cyklach maszynowych.... Dlaczego w ośmiu? Przy 8MHz opóźnienie 1us to właśnie 8 nopów.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.


Wróć do „ARM STMicroelectronics”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 3 gości