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



Teraz jest 27 sty 2025, o 13:29


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 28 sie 2014, o 20:16 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 18 sie 2014
Posty: 8
Lokalizacja: Bytom
Pomógł: 0

Witam wszystkich serdecznie.

To są moje (jakby to powiedzieć) pierwsze kroki z pisaniem w C.

Nabazgrałem sobie niby prosty program, który powinien odebrać paczkę danych, sprawdzić, czy jest jej koniec oraz wysłać zawartość bufora na PORT C + ustawianie sygnałów sterujących na PORT A - Pomijam kwestie, typu timeout - to zostawiam na później do oprogramowania.
Długość paczki danych jest zmienna i zawiera się (na razie) w przedziale od 3 do ok. 32 bajtów.
Generalnie, jest to strumień danych dla układu PSG AY-3-8913 który wysyłam z komputera.
W skrócie - µP odbiera bajty; sprawdza, czy jest koniec (znaki eb w buforze); odczekuje odpowiednią ilość przerwań; wysyła dane do PSG, wysyła znak 'n' poprzez UART i cykl powinien się powtarzać...
Niestety, program na µP wysypuje się czasami na pierwszym wysłanym znaku poprzez port szeregowy, czasami można wysłać około 11kB - muzyka wydobywa się z układu, dopóki procesor się nie zawiesi/nie zresetuje.

Od strony technicznej -> Płytka uniwersalna UM-17, ATMEGA644 w podstawce, kilkanaście kondensatorów blokujących 100nF na linii zasilania, jak i przy samym procku + kilka szt elektrolitów 10..47uF na linii zasilania, /RESET podciągnięty rezystorem 3k9 + dodatkowo kondensator 2,2nF; kwarc 22,1184MHz z przylutowaną obudową do masy oraz kondensatorami 33pF (niestety tylko takie miałem w szufladzie); układ dźwiękowy jest na zwykłej stykówce - także tutaj mnóstwo kondensatorów 100nF oraz 10uF i kabelki podpinanie przez goldpiny. Zasilanie biorę z zasilacza laboratoryjnego.

Podobny kod (o dziwo) śmiga mi na attiny2313V@28,224MHz - ale tam odbieram na sztywno ramkę 4 bajtów i ustawiam preskaler/rejestr OCR w celu wygenerowania częstotliwości 1,764MHz dla PSG oraz odpada mi przerwanie timer'a - wykorzystuje sprzętowe zmienianie stanu pinu na przeciwny (tryb CTC + toggle OC0B)

Podejrzewam, że najprawdopodobniej dochodzi do kolizji przy przerwaniach, ale nie mogę tego rozgryźć. Gdzie popełniłem błąd?

Mogę dać mini bibliotekę do obsługi hd44780 (lcd595.h/lcd595.c pisaną dawno temu) ale wątpię, by tam występował problem, gdyż tylko raz wysyłam ciąg znaków do LCD, poza tym dotychczas nie było z nią problemów w innych zastosowaniach.

Przepraszam za te gryzmoły poniżej - stare nawyki z TASM/Pascal/Basic, rozdzielczości 80x25 znaków itp... Musze się ogarnąć :/

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: 30 sie 2014, o 17:33 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 18 sie 2014
Posty: 8
Lokalizacja: Bytom
Pomógł: 0

Dobra, trochę inaczej...
Za pisanie post pod postem pewnie mi się oberwie.

Napisałem programik testowy:

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


Kod jest raczej bez sensu. Odbieram bajty, uzupełniam tablicę, a w pętli głównej mam warunek, który sprawdza, czy jest odebrane ponad 200 bajtów - jeśli tak, to zmienia stan pinu PA7 i resetuje zmienną.
W przerwaniu także warunek, który nie dopuszcza do pisania poza zakres tablicy i jest on o 1 element mniejszy, niż sama tablica.

W Br@y terminal puszczam 32 bajty z opóźnieniem co 100ms - przez kilka sekund dioda migocze, po czym następuje reset procesora (widać to po tym, że dioda raz świeci ciągłym światłem przez 3s lub nie świeci przez ten sam okres czasu)

Zmieniłem kwarc na 2x wolniejszy, ustawiłem rejestr UBRRL, zmieniłem dyrektywę f_cpu w opcjach projektu Atmel Studio 6.2 i dalej to samo :cry:

O co tu chodzi? Bo ja już nie wiem...

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2014, o 20:42 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Dobrze byłoby wiedzieć co jest źródłem resetu. Wypróbuj lekko zmodyfikowany kod:
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łę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2014, o 23:49 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 18 sie 2014
Posty: 8
Lokalizacja: Bytom
Pomógł: 0

Krauser napisał(a):
Dobrze byłoby wiedzieć co jest źródłem resetu. Wypróbuj lekko zmodyfikowany kod


W terminalu wypisuje mi:
Obrazek

Czyli, jakby wylądował znikąd na początku programu. (?!)

[edit]

Wymieniłem procesor na inną M644, wgrałem program i tylko raz wyrzuca wartość 10 po włączeniu zasilania.
Wychodzi na to, że procesor jest uszkodzony - z czymś takim jeszcze się nie spotkałem. (I raczej bym nie podejrzewał)

Dziękuje Krauser za pomoc.
Temat do zamknięcia.



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