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



Teraz jest 17 lis 2024, o 13:43


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 7 gru 2013, o 21:10 
Offline
Nowy

Dołączył(a): 01 wrz 2013
Posty: 11
Pomógł: 0

Mam Atmegę8 taktowaną zewnętrznym kwarcem 12 Mhz. Chcę przy pomocy Timera0 mrugać co kilka sekund jedną diodą, a później drugą. Siedzę na tym kilka godzin i nie mam efektów. Wybieram preskaler 64. Podliczyłem, że będę miał przepełnienie co około 754 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 PD1 powinna się palić co koło 1,5 sekundy, później przez kilka sekund dioda PD2 i potem cały cykl powinien się powtarzać od nowa.

Proszę czytać czerwony napis nad oknem pisania posta i sie stosować -- poprawiłem --> SunRiver



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2013, o 21:47 
Offline
Nowy

Dołączył(a): 07 gru 2013
Posty: 15
Pomógł: 1

Po pierwsze to chyba trzeba "volatile char sekunda" dać. Poza tym char zmieści liczby tylko 8-bitowe, czyli do 1200 nie doliczy. Klamerki się też coś nie zgadzają, ale może to źle skopiowałeś.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 gru 2013, o 22:13 
Offline
Nowy

Dołączył(a): 01 wrz 2013
Posty: 11
Pomógł: 0

Zmienię z char na unsigned int. Klamerki celowo tak dałem, wzorując się na innych przykładach kodów.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 gru 2013, o 00:27 
Offline
Użytkownik

Dołączył(a): 01 cze 2013
Posty: 56
Pomógł: 1

Tak na moje oko to warunek masz do poprawy, chyba że te klamerki rzeczywiście źle przekopiowane. Teraz to wygląda, że sekunda>2500 zadziała gdy sekunda <1200



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 gru 2013, o 01:50 
Offline
Nowy

Dołączył(a): 07 gru 2013
Posty: 15
Pomógł: 1

Krótko mówiąc spróbuj np. tak:

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 gru 2013, o 14:39 
Offline
Nowy

Dołączył(a): 01 wrz 2013
Posty: 11
Pomógł: 0

Bingo. Kod działa tak jak powinien.
Jak rozumieć taką operację?
Kod:
PORTD &= ~(1<<PD2);

Znalazłem taką stronę:
http://www.elektroda.pl/rtvforum/topic2277003.html
Na PD2 jest ustawiona 1. Operator & oznacza, że tam gdzie jest jedynka będzie jedynka, a tam gdzie zero 0. ~ oznacza zmianę z 0 na 1 i z 1 na 0. Dobrze już wiem. Tak się ustala 0 bez wcześniejszego sprawdzania jaki stan był na porcie.
Nie zauważyłem takiej opcji. Już to poprawiłem.



Ostatnio edytowano 8 gru 2013, o 16:10 przez polarczn, łącznie edytowano 5 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 gru 2013, o 14:52 
Offline
Moderator
Avatar użytkownika

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

polarczn napisał(a):
Bingo. Kod działa tak jak powinien.


to wypada chyba kliknąć klawisz "Pomógł" ? prawda ?

_________________
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: 8 gru 2013, o 15:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8587
Pomógł: 337

Dodatkowo proszę o wstawianie kodów w znaczniku [syntax]

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2013, o 19:12 
Offline
Nowy

Dołączył(a): 01 wrz 2013
Posty: 11
Pomógł: 0

Dalsza część mojej męki z pisaniem kodu. Do migających diod chciałem dodać obsługę hd44780 i adc. Wkleiłem kod odpowiedzialny za ADC to mi już diody nie mrugają, pomimo, że kod był poprawny. Dodałem funkcję przerwanie, jednak to nie pomogło. ADC też mi źle działa, bo wyświetla liczbę - 163 i nie reaguje jak przyłożę palec. Mam kondensator pomiędzy GND i AREF, więc korzystam z napięcia odniesienia 2,56V co uwzględniłem w kodzie.
Korzystam z czujnika LM335. GND w czujniki podłączone jest pod GND całego zasilania, a VCC pod rezystor 10 k i do VCC. Ostatnia nóżka do ADC5. Macie jakieś pomysły?
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: 16 gru 2013, o 20:22 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

takie małe pytanko. W jakim środowisku programujesz?
Może warto używać typów jakie oferuje avr-gcc? Zdecydowanie warto!

program jak wejdzie w pętle zaczynającą się w linii 53 a kończącej się w 69 to już z niej nie wyjdzie.
Nie będzie Ci więc migał diodami co masz zrealizowane w liniach od 79 do 110. Ten fragment nigdy Ci się
nie wykona.
Do sprawdzania stanu bitów nie używaj kociego makra bit_is_set ;-)

_________________
Jestem początkujący i moje porady mogą być błędne



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

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

do tego co napisał kolega wyżej dodam ....

Zdaje się że już była o tym mowa - weź ty spójrz na wcięcia w swoim programie, na totalny bałagan w kodzie - w ogóle nie wiadomo co do czego - i dziwisz się, że coś nie działa ? Ja się nie dziwię ... Przyznam, że ciężko w ogóle dostrzec o co chodzi w twoim kodzie. :(

dlatego :

1. zrób poprawne wcięcia
2. oddziel funkcje pomiędzy sobą (daj też komentarze)
3. popraw kod w main() bo to co jest na dole - to myślę że i tobie nawet ciężko rozpoznać o co tam chodzi

a potem zadaj pytania do konkretnych części kodu


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: 16 gru 2013, o 20:45 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

polarczn napisał(a):
Dalsza część mojej męki z pisaniem kodu. Do migających diod chciałem dodać obsługę hd44780 i adc. Wkleiłem kod odpowiedzialny za ADC to mi już diody nie mrugają, pomimo, że kod był poprawny. Dodałem funkcję przerwanie, jednak to nie pomogło. ADC też mi źle działa, bo wyświetla liczbę - 163 i nie reaguje jak przyłożę palec. Mam kondensator pomiędzy GND i AREF, więc korzystam z napięcia odniesienia 2,56V co uwzględniłem w kodzie.
Korzystam z czujnika LM335. GND w czujniki podłączone jest pod GND całego zasilania, a VCC pod rezystor 10 k i do VCC. Ostatnia nóżka do ADC5. Macie jakieś pomysły?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Co do stosowania odpowiednich typów to gorąco polecam lekturę tego postu:
http://forum.atnel.pl/topic3687-120.html#p54795
I mam taki pomysł. Nie pisz wszystkiego na raz. Jak chcesz dodać obsługę kilku rzeczy to
najpierw skup się na jednym np. wyświetlacz.
Diody migają to dokładasz obsługę wyświetlacza. Nie działa to wiesz gdzie szukać błędu.
Diody migają i wyświetlacz działa. Super. To teraz dodajesz ADC i znowu małymi kroczkami
do przodu.

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2013, o 23:22 
Offline
Moderator
Avatar użytkownika

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

MirkoT napisał(a):
I mam taki pomysł. Nie pisz wszystkiego na raz. Jak chcesz dodać obsługę kilku rzeczy to
najpierw skup się na jednym np. wyświetlacz.
Diody migają to dokładasz obsługę wyświetlacza. Nie działa to wiesz gdzie szukać błędu.
Diody migają i wyświetlacz działa. Super. To teraz dodajesz ADC i znowu małymi kroczkami
do przodu.


MirkoT --> mówi świętą prawdę - to NAJLEPSZA porada w tej sytuacji .... (taki post warto byłoby normalnie gdzieś na CZEROWNO na forum zaznaczyć) ....

tak więc polarczn jak zaczniesz tymi mniejszymi kroczkami i nawet napotkasz pierwszy błąd którego np nie będziesz w stanie sam rozwiązać, to wtedy śmiało pokaż taki mniejszy fragment kodu a nam będzie łatwiej pomóc ... naprowadzić, podpowiedzieć

ta porada kolegi wyżej - to właśnie SZTUKA PROGRAMOWANIA. Bo samo czyste pisanie kodu na pewno nie jest sztuką programowania samą w sobie.

_________________
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: 17 gru 2013, o 06:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sty 2013
Posty: 65
Zbananowany użytkownik

Pomógł: 4

Źle masz podłączony LM335, tak podłącz(pierwsza nóżka nie podłączona):
Obrazek
AN0 do PC5 w Atmedze a na VCC musisz dać 5V, na PIN AREF tak samo 5V co na LM335.

ADMUX ustaw na zewnętrzne napięcie odniesienia
Prescaler możesz ustawić na 64
i pomiar zamiast 0.0024 daj na 0.0050

I w ogóle masz złą obsługę od wyświetlacza. Tą co masz jest do PCD8544 (wyświetlacz od Nokii) zapewne z mojego tematu.

Bezmyślnie kopiujesz i wklejasz.

Aż dziw że Ci Eclipse błędami nie sypie...

_________________
Tylko głupi wie wszystko....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 gru 2013, o 08:40 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Zinyx napisał(a):
Źle masz podłączony LM335, tak podłącz(pierwsza nóżka nie podłączona):
na PIN AREF tak samo 5V co na LM335.

Tego to bym nie polecał... Zobacz poradnik Mirka o ADC. Tam jest uzasadnienie dlaczego
takiego połączenia robić nie należy :!:

Zinyx napisał(a):
Aż dziw że Ci Eclipse błędami nie sypie...

Jeśli to Eclips to na pewno sypie ;-) dlatego pytałem wcześniej w jakim środowisku kolega pisze.

_________________
Jestem początkujący i moje porady mogą być błędne



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

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