Witam,
uczę sie programować mikrokontrolery AVR i postanowiłem zrobić sam od podstaw jakiś projekt. Mianowicie, staram sie zbudować termometr na bazie czujnika DS18B20. Nie chcę zaglądać w gotowe projekty ani sugerować się czyimiś rozwiązaniami, chcę żeby był to mój projekt.
Ale chciałbym żeby ktoś doświadczony zerknął na niego i wskazał błędy w składni. Obecnie jesttem na etapie tworzenia funkcji odbierania bitów danych a mianowicie próbkowanie przychodzących bitów. Nie jest ona skończona, więc nie zwracajcie na nia większej uwagi.
Jednak główne powody dla których założyłem ten temat są nastepujące:
1) Jak zwolnić linię w ATmedze?
2) Jak wyłuskać pojedyńczy bit z bajtu?
ad.1.
W projekcie jest rezystor podciągający linię danych do '1' gdyż jest to stan domyślny linii w protokole 1wire. Sytuacja jest taka:
Mam '1' i wpisuję '0' aby nadać je przez powiedzmy 5 us:
PORTD = ~(1 << PD0);
_delay_us(5);
i teraz muszę zwolnić linię aby rezystor podciągający mógł podciagnąć ją do stanu wysokiego. Jak to zrobić? Bo chyba nie tak
PORTD = (1 << PD0); <--- to powinnien wykonać rezystor. Jak ustawić NIC na pinie? Inaczej, jak usunąć to '0', które ustawiłem?
ad.2.
Mam zmienną:
uint8_t search_rom = 0xf0
Jak wyciągnąć z tego bajtu jeden bit? Albo inaczej, jak zrobić z tej zmiennej tablicę 8 elementową? (Pisząc to chyba wpadłem na pomysł. Może jakos maskować 7 bitów i sprawdzać ten jeden za pomocą np. &? Nie sprawdzę tego gdyż jest juz późno i idę spać)
Jestem troche juz zmęczony i przepraszam za to ,że ten post jest może zbyt chaotyczny ale mam nadzieję, że mnie zrozumieliscie:).
Pozdrawiam
uczę sie programować mikrokontrolery AVR i postanowiłem zrobić sam od podstaw jakiś projekt. Mianowicie, staram sie zbudować termometr na bazie czujnika DS18B20. Nie chcę zaglądać w gotowe projekty ani sugerować się czyimiś rozwiązaniami, chcę żeby był to mój projekt.
Ale chciałbym żeby ktoś doświadczony zerknął na niego i wskazał błędy w składni. Obecnie jesttem na etapie tworzenia funkcji odbierania bitów danych a mianowicie próbkowanie przychodzących bitów. Nie jest ona skończona, więc nie zwracajcie na nia większej uwagi.
Jednak główne powody dla których założyłem ten temat są nastepujące:
1) Jak zwolnić linię w ATmedze?
2) Jak wyłuskać pojedyńczy bit z bajtu?
ad.1.
W projekcie jest rezystor podciągający linię danych do '1' gdyż jest to stan domyślny linii w protokole 1wire. Sytuacja jest taka:
Mam '1' i wpisuję '0' aby nadać je przez powiedzmy 5 us:
PORTD = ~(1 << PD0);
_delay_us(5);
i teraz muszę zwolnić linię aby rezystor podciągający mógł podciagnąć ją do stanu wysokiego. Jak to zrobić? Bo chyba nie tak
PORTD = (1 << PD0); <--- to powinnien wykonać rezystor. Jak ustawić NIC na pinie? Inaczej, jak usunąć to '0', które ustawiłem?
ad.2.
Mam zmienną:
uint8_t search_rom = 0xf0
Jak wyciągnąć z tego bajtu jeden bit? Albo inaczej, jak zrobić z tej zmiennej tablicę 8 elementową? (Pisząc to chyba wpadłem na pomysł. Może jakos maskować 7 bitów i sprawdzać ten jeden za pomocą np. &? Nie sprawdzę tego gdyż jest juz późno i idę spać)
Jestem troche juz zmęczony i przepraszam za to ,że ten post jest może zbyt chaotyczny ale mam nadzieję, że mnie zrozumieliscie:).
Pozdrawiam
Code: c