Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 7 lut 2025, o 19:57


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 21 sie 2012, o 19:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lip 2012
Posty: 203
Lokalizacja: Sosnowiec
Pomógł: 2

Witam

Od paru dni próbuję zaprząc do pracy czujniki DS18B20 na przykładzie z książki "Mikrokontrolery AVR Język C Podstawy programowania"

Swój termometr chcę postawić na Atmedze 8 a nie jak w przykładzie 32.
Tu pierwszy problem - zmiana ustawień timera (to mój pierwszy raz ;) )
Z pomocą książki i Noty Atmegi Ustawiłem to tak:

Kod:
   /* ustawienie TIMER2 dla F_CPU=1,000000 MHz */
   TCCR2 |= (1<<WGM21);            /* tryb CTC */
   TCCR2 |= (1<<CS22)|(1<<CS21);      /* preskaler = 256 */
   OCR2 = 39;                     /* dodatkowy podział przez 39 (rej. przepełnienia) */
   TIMSK |= (1<<OCIE2);            /* zezwolenie na przerwanie CompareMatch */
   /* przerwanie wykonywane z częstotliwością ok 10ms (100 razy na sekundę) */
   /* do naszych celów nie musi być to bardzo dokładne 10ms */

tutaj przykład z książki:

Kod:
/* ustawienie TIMER0 dla F_CPU=11,0592MHz */
   TCCR0 |= (1<<WGM01);            /* tryb CTC */
   TCCR0 |= (1<<CS02)|(1<<CS00);      /* preskaler = 1024 */
   OCR0 = 108;                     /* dodatkowy podział przez 108 (rej. przepełnienia) */
   TIMSK |= (1<<OCIE0);            /* zezwolenie na przerwanie CompareMatch */
   /* przerwanie wykonywane z częstotliwością ok 10ms (100 razy na sekundę) */
   /* do naszych celów nie musi być to bardzo dokładne 10ms */


W pliku lcd44780.h zmieniłem konfigurację pinów i adresy wierszy:

Kod:
// definicje adresów w DDRAM dla różnych wyświetlaczy
// inne są w wyświetlaczach 2wierszowych i w 4wierszowych
#if ( (LCD_Y == 4) && (LCD_X == 16) )
#define LCD_LINE1 0x00      // adres 1 znaku 1 wiersza
#define LCD_LINE2 0x28      // adres 1 znaku 2 wiersza
#define LCD_LINE3 0x14     // adres 1 znaku 3 wiersza
#define LCD_LINE4 0x54     // adres 1 znaku 4 wiersza
#else
#define LCD_LINE1 0x00      // adres 1 znaku 1 wiersza
#define LCD_LINE2 0x40      // adres 1 znaku 2 wiersza
#define LCD_LINE3 0x14     // adres 1 znaku 3 wiersza             Tutaj
#define LCD_LINE4 0x54     // adres 1 znaku 4 wiersza             i tu
#endif


Używam wyświetlacza WM-C2004M 4x20
(wyświetlacz podpięty prawidłowo - sprawdzałem z inną biblioteką)

Do pinu PD0 podpięty jest jeden czujnik z rezystorem 4.7k (nie wiem jak podłączyć drugi :oops: Z kolejnym rezystorem? )

Program kompiluje sie z jednym warningiem:
ain.c:123: warning: 'TIMER0_COMP_vect' appears to be a misspelled signal handler

Niestety na wyświetlaczu nic się nie pojawia :(
Próbowałem też wyświetlić napis tuż po inicjalizacji wyświetlacza, niestety efekt ten sam - 0

Proszę szanownych kolegów o pomoc, ja już nie wiem, co może być nie tak.

Jeśli ktoś chce, wstawię wszystkie pliki do przejrzenia.

------------------------ [ Dodano po: 14 minutach ]

Działa !!!

W pliku lcd44780.h zamiast #define LCD_D7PORT D miałem PORT B

Temperatura pojawia się na chwile co ok sekundę i znika.

Jak podłącza się drugi czujnik ??

_________________
sig on ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2012, o 19:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lis 2011
Posty: 302
Lokalizacja: Kraków
Pomógł: 6

Musisz zmienić nazwę wektora przerwania na:
TIMER2_COMP_vect.


Autor postu otrzymał pochwałę

_________________
Zapraszam:
filiporlo.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2012, o 21:22 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27354
Lokalizacja: Szczecin
Pomógł: 1042

1bobik1 napisał(a):

Jak podłącza się drugi czujnik ??


Dokładnie tak samo jak pierwszy ;) czyli zasilanie (to chyba wiesz jak) ;) a środkowa noga DQ do tego samego pinu procka co noga DQ pierwszego czujnika - i żadnego drugiego rezystora nie dajesz ;)


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2012, o 21:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lip 2012
Posty: 203
Lokalizacja: Sosnowiec
Pomógł: 2

filipo96 napisał(a):
Musisz zmienić nazwę wektora przerwania na:
TIMER2_COMP_vect.


Myślałem że to jakaś funkcja :oops:
Całe życie człowiek się uczy...

Dziękuje pięknie za pomoc

Śmiga aż miło (2 czujniki podpięte)

_________________
sig on ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO