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



Teraz jest 23 sty 2025, o 22:30


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 
Autor Wiadomość
PostNapisane: 12 lip 2014, o 10:35 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

Witam

Próbowałem przerobić to ćw tak żeby chodziło na attiny 2313 ale chyba jestem jeszcze za cienki w te klocki ;-) mogę jedynie powiedzieć że od strony podłączeniowej jest wszystko ok bo jak wystawiam na wszystkie bazy tranzystorów npn satn niski (anody wyświetlacza) i stan niski na wszystkie segmenty to wszystkie segmenty 4 cyfr. wyświetlacza się palą.

Także problem tkwi w programie- może używam złych rejestrów lub nazw w przeraniach.
Dobrze by było żeby jakiś fachowiec rzucił na to okiem;-)
z góry dzięki za pomoc!!

Przypomne jeszcze ze zadanie w tym ćw. polega na tym aby w oparciu o przerwania cyklicznie załączały się kolejne cyfry tak aby płynnie wyświetlały się cyfry 1495

oto kod:

plik main.c

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


plik d_led.c


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




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



Ostatnio edytowano 20 lip 2014, o 11:02 przez Mac, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2014, o 11:54 
Offline
Moderator
Avatar użytkownika

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

A sprawdzałeś w ogóle jedną diodą LED czy działa ci przerwanie multipleksowania ? bo coś mi pachnie że nie za bardzo ....

obejrzyj sobie to:

http://mirekk36.blogspot.com/2014/04/pu ... ednej.html

a potem zastanów się - jak już sprawdzisz że ci nie działa to przerwanie - coś tu w kodzie zrobił:

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łę

_________________
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: 12 lip 2014, o 14:27 
Offline
Użytkownik

Dołączył(a): 28 mar 2014
Posty: 30
Pomógł: 3

Jest błąd w ustawieniu timera - dwa razy wpisujesz do rejestru TCCR0A, ten drugi powinien być TCCR0B , a tak zamazujesz wartość w TCCR0A i zamiast nadać mu wartość 2 nadajesz 5.
W obsłudze przerwania gasisz wyświetlacze, ale ich nie zapalasz - zmienna licznik nie zmienia wartości ANODY_PORT.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lip 2014, o 20:33 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

Dzięki alef i mierek za pomoc wyświetlacz już śmiga na attiny 2313, przy okazji wyszło jeszcze że źle wybrałem piny dla anod powinny być od PD0-3 a miałem od PD1-4 ;-)

Ale już nabrałem chęci żeby zrobić pierwszy mój termometr, także przeskoczę od razu do ćw. 1 wire
szkoda że jest to oparte na wyświetlaczu LCD ale jakos sobie chyba to przerobie.
pozdrawiam.

------------------------ [ Dodano po: 4 minutach ]

Jeszcze chciałem dodać ze to jest super sposób na znalezienie błędu w programie za pomocą diody i petli while , poradniki mirka są genialne.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lip 2014, o 21:11 
Offline
Użytkownik

Dołączył(a): 28 mar 2014
Posty: 30
Pomógł: 3

Przerabiałem problem wyświetlacza LED i 1wire na 2313 i chętnie służę pomocą.
Do obsługi 1wire napisałem (może to za dużo powiedziane) funkcje, które zawierają jedynie niezbędne elementy.
Dlatego radzę, by kontynuować temat wyświetlacza LED i wzbogacić go o pomiar temperatury.

Dodam jeszcze, że w przypadku, gdy program nie działa warto skorzystać z symulatora. To naprawdę znakomite narzędzie i warto zawrzeć z nim bliższą znajomość.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lip 2014, o 08:28 
Offline
Użytkownik

Dołączył(a): 19 sty 2013
Posty: 322
Pomógł: 22

Witam

Gdybyś miał problem to możesz się wzorować na:
http://forum.atnel.pl/topic7783.html

Pozdrawiam
Elektronik



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2014, o 08:23 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

Witam ponownie

Tak zastanawiam się nad tym termometrem i dochodze do wniosku ze to wcale nie jest taka prosta
sprawa;-) , ale chyba to będzie polegało na tym że

1. musze dodać do procedury przerwania z cw. multiplex.. led procedurę z 1 wire gdzie znajduje się timer programowy.
2 zmodyfikować funkcje display_temp tak jak to zrobił jari17 w podanym przez elektronika linku


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


tylko zastanawiam się dlaczego cy4 = 12 gdzie 12oznacza tutaj spacje tak jak to ma miejsce przy subzero , a powinna zostać wyświetlona jakaś konkretna wartość po kropce
czy nie powinno być cy4= cel_fract_bits ?

pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2014, o 10:45 
Offline
Użytkownik

Dołączył(a): 19 sty 2013
Posty: 322
Pomógł: 22

Ten program wyświetla tylko części całkowite temperatury ale jeżeli wpiszesz cy4= cel_fract_bits to będziesz miał temperaturę wyświetlaną z dokładnością 1/10 stopnia. Ciekawe jak sobie poradzisz z wyświetleniem kropki na wyświetlaczu, bo ja mam z tym problem. Usuń biblioteki nie wolno ich publikować na forum.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2014, o 11:14 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

sorry za biblioteki - czy tu chodzi o jakies prawa autorskie ?
nad kropką myślałem i chyba najlepiej będzie dodać do przerwania z cw. muliplex.. led dodatkową "cy(x)" i dodać kropkę do tablicy i dołączyć ją do cy3 tzn gdy:
else if( licznik==4) LED_DATA = pgm_read_byte ( &cyfry[cy3][cy(x)])

mysle ze cos w tym kierunku będę kombinował



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2014, o 11:27 
Offline
Użytkownik

Dołączył(a): 19 sty 2013
Posty: 322
Pomógł: 22

Mac napisał(a):
sorry za biblioteki - czy tu chodzi o jakieś prawa autorskie ?



Tak chodzi o prawa autorskie pliki main.c możesz publikować ale biblioteki już nie tylko części zmienione.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2014, o 11:34 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

a co myślisz o kropce - w dobry kierunku idę?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2014, o 12:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Ja wyświetlanie kropek rozwiązałem w taki sposób topic7744.html#p87600

Jeśli potrzebujesz tylko jedną kropkę to nie musisz tworzyć czterech zmiennych kropkaX. Wystarczy jedna. No i w przerwaniu wystarczy zmodyfikować tylko tą część kodu odpowiedzialną za wyświetlanie cyfr na tym wyświetlaczu na którym ma się też wyświetlać kropka.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2014, o 21:14 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

Spróbowałem napisac program i jak zwykle eclipse zaczął krzyczeć tyle ze ja zabardzo już nie wiem co go boli;-)


main.c:(.text+0x3a): undefined reference to `display_temp'
main.c:(.text+0x8a): undefined reference to `display_temp'
make: *** [Term11.elf] Error 1

a to kod main .c

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: 20 lip 2014, o 21:49 
Offline
Użytkownik

Dołączył(a): 29 mar 2012
Posty: 595
Lokalizacja: Jaworzno
Pomógł: 39

Przenieś ciało funkcji display_temp poza funkcję main i powinno być OK.


Autor postu otrzymał pochwałę

_________________
Pozdrawiam
PP



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2014, o 22:53 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

Uprzejmie donoszę że termometr już działa.
Piekne uczucie jak coś w końcu zaczyna działać tak jak chcesz.

Piotrek tak jak pisałeś przeniesienie ciała tej f. poza f. main rozwiązało problem
jeszcze tylko nie wiem czemu musi ono być poza f. main, ale to zostawię sobie na jutro ( ide spać)

Chciałem podziekowac wszystkim za pomoc w moich zmaganiach z programowaniem.
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lip 2014, o 10:38 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

No tak tylko hmm... yyyy... kiedy mówimy o zagnieżdżeniu ( co to jest to niedozwolone zagnieżdżenie)?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lip 2014, o 11:05 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

Acha to o to chodzi - dzięki - mi tak czasem trzeba coś wiecie jak dziecku.
pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lip 2014, o 22:47 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

Witam
chciałbym się jeszcze dowiedzieć paru rzeczy w związku z tym programem

Pierwsza sprawa dotyczy petli while gdzie instrukcja if sprawdza (s1_flag) i jeśli ona się pojawi to są wykonywane zadania. Ta flaga pojawia się co sekundę ale pytanie jaka jest częstotliwośc sprawdzania czy ta flaga już się pojawiła, czy dyktuje to czestotliwośc taktowania procesora podzielona przez preskaler czy tez inny mechanizm jest tutaj zastosowany?

Druga sprawa dotyczy samych flag - pierwszy raz się z nimi spotkałem właśnie w tym ćw. na razie sobie to tłmacze że to jest jakiś ustalony przezemnie znacznik który się pojawia gdy jakiś warunek w timerze jest spełniony i za pomocą niego w głownym programie można wykonywać jakies zadania. Ma ktoś jakiś link do jakiegoś wyjaśnienia jak i z czym to się je, albo jakiś własny opis wyjaśniający zasady rządzące flagami.

z góry dzięki

Pozdrawiam; Mac



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lip 2014, o 23:11 
Offline
Moderator
Avatar użytkownika

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

Mac napisał(a):
Ta flaga pojawia się co sekundę ale pytanie jaka jest częstotliwośc sprawdzania czy ta flaga już się pojawiła


Częstotliwość sprawdzania to ilość obiegów pętli while i nikomu ten czas tak z grubsza rzecz biorąc nie jest potrzebny bo jest on BARDZO zmienny .... od czego zależy? od tego ile rzeczy napiszesz do wykonania w tejże pętli głównej i ile czasu każda z tych rzeczy będzie się wykonywać ...

Generalnie podejdź do tego w ten sposób - że jeśli masz dobrze pisany program, bez żadnych delayów czyli w sposób nieblokujący to pętla główna obraca się wiele tysięcy razy w ciągu sekundy w zależności oczywiście od taktowania procka. To jest ASYNCHRONICZNE sprawdzanie stanu flagi ...

Mac napisał(a):
Druga sprawa dotyczy samych flag - pierwszy raz się z nimi spotkałem właśnie w tym ćw. na razie sobie to tłmacze że to jest jakiś ustalony przezemnie znacznik który się pojawia gdy jakiś warunek w timerze jest spełniony i za pomocą niego w głownym programie można wykonywać jakies zadania


No i dokładnie o tym piszę w książce ... tak jest z podstawowym zrozumieniem flag programowych ... nie inaczej.

Mac napisał(a):
Ma ktoś jakiś link do jakiegoś wyjaśnienia jak i z czym to się je, albo jakiś własny opis wyjaśniający zasady rządzące flagami.


Nie ma żadnego sprecyzowanego opisu zarządzania flagami - jak rozumiesz o co chodzi - a widać po opisie że rozumiesz - to ty sam ten mechanizm możesz już dalej wykorzystywać na setki miliony sposobów i do czego zechcesz. Inaczej jest z flagami sprzętowymi - bo takie też są - i zwykle są one opisane w bitach w rejestrach konfiguracyjnych różnych modułów procka. A działają na podobnej zasadzie. Gdy coś się w danym module wydarzy to procek ustawia flagę na JEDEN, dzięki czemu może się albo wykonać przerwanie jeśli tego chcemy, albo równie dobrze możemy nie wywoływać przerwania tylko sprawdzać warunkiem IF taką sprzętową flagę ...

_________________
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: 7 sie 2014, o 21:02 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

Witam

Przedstawiam końcowy efekt zmagań w tym temacie ;-)
Obrazek

------------------------ [ Dodano po: 20 minutach ]

Dziekuje P.Mirku za wyjaśnienie zagadnienia związanego z flagami.
No i jeszcze chciałbym dodać że mając takie zaplecze jakie Pan stworzył( poradniki video, książki, to forum) to dla mnie jest to wspaniała przygoda z nauką programowania i kursem eagle.
Sam jestem mechanikiem okrętowym i wcześniej hobbystycznie interesowałem się elektronika, no a teraz mikrokontrolery i możliwości jakie one daja w sterowaniu roznych urządzeń fascynuje mnie.
Oby tylko czasu starczyło na to hobby;-)
Pozdrawiam.



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

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