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



Teraz jest 30 mar 2026, o 18:24


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 20 paź 2013, o 20:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2013
Posty: 87
Lokalizacja: Windsor, UK
Pomógł: 0

Witam,

Napisalem sobie taki oto kod:

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


Zadanie tego programu jest co sekunde zapalic i zgasic diode led.
Program dziala tylko zamiast 1 sekundy jest ich o wiele wiecej, nie wiem dokladnie ile bo nie sprawdzalem.

Mozecie prosze spawdzic kod i podpowiedzic co jest zle.
Timer jaki wykorzystuje to TIMER1 16 bit.
Taktowanie procka 16MHz
Kod ten jest przerobka kodu o pomiarze temperatury.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 paź 2013, o 20:45 
Offline
Moderator
Avatar użytkownika

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

tyko czy aby na pewno przestawiłeś pan fusebity z fabrycznego taktowania 1MHz ? na zewn. kwarc ?

_________________
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: 20 paź 2013, o 21:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2013
Posty: 87
Lokalizacja: Windsor, UK
Pomógł: 0

Tak przestawilem, fusebity ustawione ma arduino. Inne programy z ksiazki smigaja bez problemu tylko ten moj cos nie chce.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 paź 2013, o 21:13 
Offline
Moderator
Avatar użytkownika

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

No dobrze ale widzisz - pewnie masz bluebooka i nie stosujesz się do zasady dobrego programowania - czyli np wstawiania komentarzy, co :

1. i ciebie gubi
2. i utrudnia innym analizę kodu

bo weźmy np to jaką częstotliwość taktowania timera ustawiłeś ? hmmm a też nawet słowa o tym nie napisałeś ...

więc pochyl się nad tym i zobacz co zrobiłeś - opisz to a pewnie sam od razu dojdziesz do babola ok ? ;)

_________________
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: 20 paź 2013, o 21:22 
Offline
Użytkownik

Dołączył(a): 07 maja 2012
Posty: 119
Pomógł: 2

Ostatnio sam się bawiłem Atmegą328p i zauważyłem dziwną sprawę.
Jeżeli używasz zewnętrznego rezonatora kwarcowego BEZWZGLĘDNIE musisz odznaczyć tą opcję:
Obrazek

Sam się na to naciąłem, bo mi UART krzaczył, a ja nie wiedziałem dlaczego...
Jeżeli masz zaznaczone to pole, to zewnętrzny rezonator nie będzie poprawnie działał.



Ostatnio edytowano 20 paź 2013, o 21:55 przez sosnus, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 paź 2013, o 21:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2013
Posty: 87
Lokalizacja: Windsor, UK
Pomógł: 0

Juz doszedlem, za chwile poprawie kod i wkleje na nowo.
Zmylilo mnie to ze u pana w ksiazce taktowanie timera, ustawil pan na 108.

Ja to wyliczylem blednie ( mialem ustawiony blednie takze pryscaler) a powinno byc tak

16000000 Hz / 256 prescaler / 100 ilosc cykli w sekundzie = 625.

Kod dzial dobrze.

Mam jeszcze jedno pytanie:

Chcialbym tak ustawic flage zeby przeranie nastapilo po uplywie 36000 sekund,
to znaczy procek zliczy te sekundy wykona zadanie, zadanie to ma trwac 20-30 minut i od nowa.

I tu wlasnie chcial bym malej wskazowni jak to rozwiazac.

------------------------ [ Dodano po: 16 minutach ]

Oto poprawiony dzialajacy kod z opisem:

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


Dziekuje panie Mirku a moze mi pan podpowiedziec jak rozwiazac moje pytanie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 paź 2013, o 22:38 
Offline
Moderator
Avatar użytkownika

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

peter81j napisał(a):
Chcialbym tak ustawic flage zeby przeranie nastapilo po uplywie 36000 sekund,
to znaczy procek zliczy te sekundy wykona zadanie, zadanie to ma trwac 20-30 minut i od nowa.


no to proszę podpowiedź

przede wszystkim to ja myślałem że ty to piszesz ot tak żeby po prostu pobawić się i potestować ... bo jeśli nie tylko zamierzasz w ten sposób liczyć tak długie czasy i to nie mówię już o 20-30min ale w ogóle jakichś typu nawet minuta a do tego bierzesz TIMER 16-bitowy !!! ;) to to jest jak najcięższy grzech pierworodny ;) i jak ZEUS by się o tym dowiedział to od razu pierdyknąłby jakimś gromem z nieba . To w najczystszej postaci - marnotrastwo zasobów procka a szczególnie czegoś tak cennego jak timer 16bitowy ;)

Panie kochany przede wszystkim jak chcesz odmierzać tak długaśne czasy to na pewno nie jest ci potrzebna precyzja co do us, ba! nawet co do ms ani nawet jak myślę co do kilku sekund

dlatego jak już to użyć tu można albo timera programowego którego podstawę czasu można zrobić sobie na zwyklaku timerze 8-bitowym a przy okazji jeszcze kilka innych timerów programowych do różnych rzeczy ....

zajrzyj proszę w bluebooku do rozdziału:

"Wstęp do systemów czasu rzeczywistego"

tam jest to czego potrzebujesz do takich projektów ;)
------------------------------------------------------

po drugie przy TAK długich czasach 20-30min to nawet zewnętrznego RTC użyć ? ;)

_________________
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: 20 paź 2013, o 23:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2013
Posty: 87
Lokalizacja: Windsor, UK
Pomógł: 0

Nie z tym timere to takie proby. Timer moze byc teraz zmieniony. :oops:

No wlasnie potrzeba mi tego do sterowania lodowka a dokladnie odmrazaniem. Bo padla mi elektronika. Od strony elektrycznej nie ma problemu bo to latwe. Tak wiec jak pisalem po wlaczeniu ukladu ma odmierzyc 10 godzin, wylaczyc kompresor I wlaczyc gzalke na 20 minut I tak w kolko.

Moj cel to jak najmniesza ilosc czesci elektronicznych.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 paź 2013, o 23:26 
Offline
Moderator
Avatar użytkownika

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

No to w obsłudze przerwania tyle że na timerze 8-bitowym robisz tykanie co 100ms

a w przerwaniu co za problem zliczać: ss,mm i hh ??? przecież teraz masz zliczanie tylko sekund a co za kłopot dodać kolejny if i kolejny if dla minut i godzin ?

;)

_________________
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: 22 paź 2013, o 21:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2013
Posty: 87
Lokalizacja: Windsor, UK
Pomógł: 0

Z dodaniem minut i godzin to nie bedzie problemu bo to tak samo jak sekundy tylko za bardzo nie rozumiem jak dalej rozpoczac dzialanie po uplywie 10 godzin i zeby trwalo 20 minut a potem reset i tak w kolko.
Jakas ciemnosc mnie nawiedzila.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 paź 2013, o 22:52 
Offline
Moderator
Avatar użytkownika

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

trzymać czas np w postaci jednej liczby. Sekundy można sobie darować a godziny i minuty zamieniać na jedną liczbę całkowitą tak:

( godziny * 60 ) + minuty

wtedy możesz sobie łatwo porównywać i sprawdzać czas w procku

masz np dwie zmienne jedna będzie zawierać czas1 = 17:34 a druga czas2 = 21:18

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


i teraz gdzieś w kodzie:

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


to tylko taki obrazowy przykład ale już chyba widzisz co i jak można z tym dalej robić na różne sposoby ;)

_________________
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: 31 paź 2013, o 22:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2013
Posty: 87
Lokalizacja: Windsor, UK
Pomógł: 0

No to po malej przerwie powrot na forum i zapytanie odnosnie Timera 8-bitowego.

Zmienilem kod tak zeby uzywac timera 8 bitowego ale teraz mam Warring ze

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

Mysle ze wiem dlaczego tak jest, Timer 8 bitowy moze tylko zliczac do 256 a ja mam wieksza wartosc.
O dziwo po wgraniu tego kodu do procka program dziala.
Dlatego wlasnie we wczesniejszym kodzie uzylem wczesniej Timera 16 bitowego gdzy tam mozna zliczac wieksze wartosci.
Czy mam sie przejmowac tym warringiem czy nie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2013, o 22:20 
Offline
Moderator
Avatar użytkownika

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

a niby dlaczego program miałby nie działać po takim zapisie ?

OCR0A = 625;

hmmm ? .... będzie działać ... tyle że jak można próbować do rejestru 8-bitowego wpisywać wartość liczby zapisanej na 16-bitach ?

OCR0A = 0b 00000010 01110001;

jak pan myślisz jaka wartość pojawi się w rejestrze ?

Mała podpowiedź w OCR0A pojawi się 113 zamiast 625 - o to tobie chodziło ? i przed tym ostrzega cię kompilator ... bo nie ma powodu zatrzymać kompilacji - timer będzie działać tylko że z CAŁKIEM nieoczekiwaną częstotliwością dla ciebie

peter81j napisał(a):
Czy mam sie przejmowac tym warringiem czy nie

teraz sam pomyśl czy się przejmować warningiem czy nie ?


peter81j napisał(a):
Dlatego wlasnie we wczesniejszym kodzie uzylem wczesniej Timera 16 bitowego gdzy tam mozna zliczac wieksze wartosci


pisałem ci że da się na takie potrzeby jak twoje - wystarczy odliczać 100Hz ...

ale napisz jaką masz częstotliwość taktowania procka i co chcesz w ogóle teraz uzyskać ...

_________________
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: 31 paź 2013, o 22:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2013
Posty: 87
Lokalizacja: Windsor, UK
Pomógł: 0

Taktowanie procka to 16MHz ale chyba je zmienie na 8 MHz bo wtedy kwarc odejdzie.

Wlasnie nie wiem czemu ale moj umysl zawiesil sie na tych sekundach ale ja ich wcale nie potrzebuje bo chcem odliczac godziny.

Dopisale w kodzie jeszcze cos takiego i mysle ze teraz program zlicza mi tez minuty i godziny:

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


Tylko ze teraz widze ze on zlicza ale nie wiadomo co bo
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
wprowadza blad.

Wyliczylem to tak :

16000000/ 256/ 100 = 625

jak dam wiekszy prescaler - 1024

16000000/ 1024/ 100 = 156.25 i tu ma problem bo zostaje reszta .25



Ostatnio edytowano 31 paź 2013, o 22:44 przez peter81j, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2013, o 22:40 
Offline
Moderator
Avatar użytkownika

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

peter81j napisał(a):
Tylko ze teraz widze ze on zlicza ale nie wiadomo co bo
Składnia: [ Pobierz ] [ Ukryj ]
język c
OCR0A = 625;
GeSHi
wprowadza blad.


No ja widzę, że coś ci się zawiesiło bo pisząc to widać że albo nie przeczytałeś tego co pisałem wyżej albo nie chciałeś przeczytać i przeanalizować :(

_________________
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: 31 paź 2013, o 22:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2013
Posty: 87
Lokalizacja: Windsor, UK
Pomógł: 0

Czytalem i analizowale, wiem czemu bedzie 113 zamiast 625 dlatego edytowal post i napisalem wyliczenia dla mojego taktowania przy prescaler 256 i 1024



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2013, o 23:03 
Offline
Moderator
Avatar użytkownika

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

aha ok to teraz zrozum - co za różnica że użyjesz timer 8 bitowy, który będzie zliczał czas od powiedzmy 20ms zamiast od 1s ?

Tym bardziej że jeszcze po drodze może ci się przydać to do timerów programowych i do wielu rzeczy w programie.

_________________
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: 31 paź 2013, o 23:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2013
Posty: 87
Lokalizacja: Windsor, UK
Pomógł: 0

No wlasnie nie za bardzo rozumiem tych ms, a sekundy, minuty i godziny to mamy na codzien tak wiec wydaja sie latwiejsze.

Przerobilem kod tak:

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


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


Dioda dziala teraz zupelnie inaczej. Wydlug stopera wychodzi sekunda na ON, OFF

------------------------ [ Dodano po: 56 minutach ]

Timer dziala bez problemu. I wiedze ze jeszcze przedemna dluga droga do poznania jezyka C.

Panie Mirku napisal pan wczesniej zeby zamienic godziny i minuty na liczbe calkowita, to rozumiem ale jak teraz zamienic te godziny i minute ktore liczy procek w przerwaniu.



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

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO