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



Teraz jest 22 gru 2024, o 15:28


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 12 mar 2014, o 21:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Witam


Jak Powinno wyglądać uruchomienie timera w ATmega8A

chodzi mi o to jak zastępować timerem

_delay_ms();

żeby migać diodą na porcie PC5
i drugą z innym czasem na PD5

i inne zastosowania


Czy może mi ktoś w skrócie objaśnić co i jak czytam już drugi raz blue booka ale timera jeszcze nie potrafię stosować a dopiero teraz trenuje w praktyce na ATmega8A-PU



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2014, o 21:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Poczytaj o timerach programowych. Strona 406 BB.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2014, o 22:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 kwi 2013
Posty: 257
Lokalizacja: 3miasto
Pomógł: 5

Bedi napisał(a):
Czy może mi ktoś w skrócie objaśnić co i jak czytam już drugi raz blue booka ale timera jeszcze nie potrafię stosować

Otwórz BlueBook-a rozdział 5.4 Multipleksowanie led - przerwania to powinno rozjaśnić temat.

_________________
https://www.facebook.com/jacekplichtaphotography/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2014, o 15:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Przeanalizowałem

Blue Booka i kod z podobnego programu jaki znalazłem >> topic4366.html

Jednak nadal nie zrozumiałem tych Timerów ślęczę i próbuję w oparciu o inne kody jednak nadal nic nie wychodzi

Doszedłem za to jak zrobić przycisk NC proszę sprawdzić czy tak jest poprawnie


Jeszcze jedno testuje wszystko na ATmega8A-PU czy na tym Procku w Timer0 nie ma trybu CTC czy nie zaważyłem w PDF

wykorzystałem Timer2 czyli 8bitowy


Głównym celem jest to aby regulować czas potencjometrem np od 30sek do 15min ale na początek muszę chociaż zrozumieć jak obchodzić się z tym Timerem


Prosił bym o poprawienie kodu z stosownym komentarzem

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 mar 2014, o 16:04 
Offline
Moderator
Avatar użytkownika

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

Jeśli zależy ci na razie na prostej, nieskomplikowanej ale za to nieblokującej i dobrej metodzie obsługi klawiszy - to proponuję zaglądaj częściej na mojego bloga a w tym przypadku konkretnym polecam ci to:

http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html

sprawdź proszę

_________________
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: 13 mar 2014, o 16:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2013
Posty: 426
Pomógł: 36

Bedi napisał(a):
OCR2 = 312;             // podział przez 312 rejestru porownaia   31250/312= około 100Hz a to odpowiada 10ms
 
        //przy OCR2= 312; pojawia sie żółty znaczek z informacją >> large integer implicitly truncated to unsigned type


Jako, że timer jest 8 bitowy to taka też musi być wartość wpisana do rejestru porównania czyli 0-255.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 mar 2014, o 11:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

P.Mirku przejrzałem podany link widziałem wcześniej cześć I nie spostrzegłem że już są następne pewnie dlatego że skupiłem się na czytaniu książki czytam już drugi raz, za pierwszym razem już po 230stronie chciałem programować ale stwierdziłem że za szybko się rzucam teraz zakupiłem trochę sprzętu parę mikro kontrolerów i coś tam skubie ale utknąłem na timerach może nie tyle jak je włączyć ale jak je później wykorzystać zamiast "_delay_ms()" .

A w programie faktycznie zapomniałem o drganiu styków. Zaznaczam że nie będę korzystał z microswitch a zwykłych wyłączników 230v bistabilny (ON/OFF) i wydaje mi się żeby nie stosować _delay_ms() drgania rozwiąże sprzętowo. Co Pan o tym sądzi ?

Testując Pana program z Części II O drganiu styków faktycznie działa ale nie na takich klawiszach bistabilnych jedynie na monostabilnych (typu dzwonkowego) lub po prostu microswitch i od razu pytanie czemu w programie nie było ustawienia PORTx gdzie podłączamy klawisz nie był ustawiany jako wejście ? Tylko od razu podciągany do VCC .


Poprawiłem program >>>


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 mar 2014, o 12:10 
Offline
Moderator
Avatar użytkownika

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

Bedi napisał(a):
czemu w programie nie było ustawienia PORTx gdzie podłączamy klawisz nie był ustawiany jako wejście ?


A w książce piszę o tym wyraźnie ;) ... i w nocie PDF można zobaczyć - że wszystkie bity rejestrów DDRx są ustawione na ZERO po resecie - czyli co ? ... czyli wszystkie piny po resecie są i tak już wejściami dlatego nie trzeba jeszcze raz programowo tego ustawiać bo po co ? ;)

wystarczy już tylko podciągnąć do VCC ;)

_________________
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: 14 mar 2014, o 12:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Zapamiętałem że w kodzie było użyte na189str a nie pamiętałem że na 190str jest adnotacja że użył Pan tylko po to by było przejrzyściej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 mar 2014, o 12:43 
Offline
Użytkownik

Dołączył(a): 13 mar 2014
Posty: 37
Pomógł: 0

Cytuj:
Jak Powinno wyglądać uruchomienie timera w ATmega8A?


Może przedstawię to na kodzie którego sam używam.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


1/ Do tego momentu masz wszystko dobrze.
2/ Hmm dlaczego w tej linijce w nawiasach wpisałeś "OCIE1A"? Jak on nawet nie należy do timera 8 bitowego tylko 16 bitowego.
Może nie uważnie czytałeś książkę, tego nie wiem. Ale otwórz ją na stronie 199, ostatni akapit, drugie zdanie. Jest tam jasno napisane:
"Zauważ, że część bitów przedstawiona jest na szaro. Oznacza to, że te bity nie dotyczą Timer0 (u nas to Timer2), który właśnie jest opisywany. Mamy zatem do dyspozycji tylko dwa bity - OCIE0 (u nas to OCIE2) oraz...".

Nie zauważyłem u Ciebie takiego fragmentu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

To ten fragment odpowiada za tak "fajne" działanie przerwań. ;)
1/ Zmienna pomocnicza na której są wykonywane obliczenia
2/ Jeżeli gdzieś w programie (ale o tym później) przypiszesz tej zmiennej (Timer1) jakąś wartość to jest także oddawana zmiennej n.
3/ I tutaj jest warunek. Jeżeli zmienna n jest różna od zera wykonuje się działanie --n, czyli odejmowane jest 1 od zmiennej n i następnie przypisanie do Timer1.

A teraz kod który u Ciebie mógłby zmieniać stan diody LED na przeciwny co określony czas.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


1/ Tutaj sprawdzany jest warunek czy zmienna Timer1 jest równa 0, jeżeli tak to wykonają się następujące rzeczy.
LED_TOG; - dioda zmieni stan na przeciwny i
Timer1 = x; - do zmiennej Timer1 zostanie przypisana dowolna wartość (w miejsce x) wpisana przez Ciebie.

I później za każdym obiegiem programu jest sprawdzana ta wartość czy już osiągnęła 0, jeśli nie, nic się nie dzieje.

Aa i jeszcze jedno, z racji tego, że do przerwania dochodzi co 10ms (100Hz), to aby dioda migała co 1s w zmienną Timer1 trzeba wpisać 100.
100*10=1000ms = 1s



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 mar 2014, o 12:56 
Offline
Moderator
Avatar użytkownika

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

Japa;~) --> fajnie wyjaśnione , więc ja już nie będę pisał ... dzięki ;)

_________________
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: 14 mar 2014, o 13:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Dzięki bardzo Japa;~) że poświeciłeś swój czas żeby mi rozjaśnić sytuacje , ale zanim zobaczyłem twój post znalazłem
filmik P.Mirka pt. AVR - wskaźniki, struktury - część 1


I wzorując się na kodzie bo nawet ten sam timer był użyty udało mi się wreszcie uruchomić pierwszy Timer :D



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: 12 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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