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



Teraz jest 28 mar 2024, o 16:39


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 1 cze 2012, o 04:21 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 27 lut 2012
Posty: 19
Lokalizacja: Czarnowo, wpj. Kijawsko Pomorskie
Pomógł: 1

Witam

na początku zaznaczę tylko że, zapoznałem się już z innymi postami na ten temat na forum:

A teraz do sedna sprawy:

Wg. wskazówek zawartych w książce "mikrokontrolery AVR Język C podstawy programowania" zacząłem bawić sie UART-em na ATMEGA128 (nie bede ukrywał jest to projekcik do pracy w którym głównym celem jest komunikacja po SMBUS w trybie SLAVE z urządzeniem zewnętrznym dane do komunikacji maja być ładowane z PC przez RS232 - max232 /USB - FT232RL). Testowałem podstawy komunikacji po RS232 i było OK - funkcje wysyłania jednego znaku i stringa oraz odbioru pojedynczego znaku działały bez zarzutu. Docelowo muszę jednak buforować dane które będą odbierane po UART - z PC i dale beda wysyłane na żądanie do mastera na SMBUS (do zapełnienia będę miał kilka tablic i zmiennych). Problem tkwi w tym ,że pomimo uaktywnienia przerwania od UART0 w atmega128 wydaje się, że bufor nie jest uzupełniany gdy wysyłam jakieś dane z terminala (Bray Terminal - dane wysyłane ze znakiem ENTER). Jak można zobaczyć konstrukcja bufora jest żywcem wyjęta z książki. Program w tej wersji powinien odesłać mi po RS odebrane dane z PC.

programik napisany został w środowisku ECLIPSE z WinAVR-20100110 , plik make wygenerowany z eclipse nie modyfikowany.

wydaje mi się że, wszystko jest ok ale znając życie i godzinę pisania tego programiku (ok 2 nad ranem) gdzieś zaszył się jakiś błąd. tak więc nie pozostaje mi nic innego jak prosić o wskazówki i wytknięcie moich ew. błędów.

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: 1 cze 2012, o 06:40 
Offline
Moderator
Avatar użytkownika

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

----[ edit: mirekk36 ]
OK, ale po pierwsze proszę umieszczać kody programów w znacznikach [ syntax = c ] zamiast [ code ] dobrze ? tak jak to poprawiłem koledze.


A teraz do rzeczy - najpierw pytanie - co to robi w kodzie programu?

Kod:
#ifndef F_CPU
        #define F_CPU 8000000UL
#endif


przecież w książce rozpisywałem się niejednokrotnie, żeby czegoś takiego nie robić - a tym bardziej, że kolega słusznie robi i pisze programy w Eclipse. Przecież stałą F_CPU masz dostępną w każdym miejscu programu i nie trzeba a nawet nie powinno się jej deklarować w kodzie.

Poza tym czy rzeczywiście masz taktowanie procka 8MHz ???

A jeśli tak ? - to czy zwróciłeś uwagę jak duży jest procent błędów dla prędkości 115200 ???? przecież to aż 8,5% !!! Zajrzyj sobie na ostatnią stronę rozdziału USART swojego procka - tam masz przecież tabele z błędami i prędkościami w zależności od różnych wartości taktowania. Wystarczy rzucić okiem na 8MHz i już widać że masz sporo baboli i ta transmisja ma prawo się sypać ot tak - z marszu. Dopuszczalny błąd to MAX 2 %

_________________
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: 1 cze 2012, o 09:18 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 27 lut 2012
Posty: 19
Lokalizacja: Czarnowo, wpj. Kijawsko Pomorskie
Pomógł: 1

1) przepraszam za ten wklejony kod
2) kod ponizej zostal mi jeszcze z nowego AVR STUDIO, poprawie go niezwlocznie jak przyjade z pracy

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


3) te 8% to duzo wiem lecz program ktory przejelem do napisania (wczesniej w BASCOM AVR) dzialal jesli chodzi o transmisje po UART. Po powrocie do domu zmienie z wewnetrznego gen RC na zewnetrzny 11.0592MHz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2012, o 09:30 

Pomógł: 0

Z mojej strony mogę ci polecić ten topic topic968.html , oraz ten
topic977.html

Najważniejsze, by robić wszystko jak Mirek przykazał :). Żadnych ustawień nie zostawiasz przypadkowi, to że gdzieś coś kiedyś działało to nie znaczy, że teraz musi, sam się parę razy przejechałem na tym.

Po za tym, mogę ci polecić sposób w jaki ja sobie poradziłem z buforem, wrzucałem dokładnie to co dostałem po RS232 jako echo, oraz wysyłałem sobie wszystkie znaki które przychodziły po RSie, na LCD, podłączonym tymczasowo.
Dzięki temu dokładnie wiedziałem gdzie popełniam błąd, czy przy obsłudze samego rs-a, czy już gdzieś dalej.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2012, o 18:22 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 27 lut 2012
Posty: 19
Lokalizacja: Czarnowo, wpj. Kijawsko Pomorskie
Pomógł: 1

no i jestem i psuje dalej:

wywaliłem z kodu predefinicje "kryształka" teraz występuje tylko w pliku make
co do samej transmisji: prędkość ustawiona na 38.4k bod

Niestety dalej nie ma efektu: do testów wrzuciłem zmienną flag aby inkrementowała sie za każdym "odpaleniem się" przerwania i wyrzucam ją na UART w main(). Programik działa do momentu wejścia w obsługę przerwania - dokładnie rzecz ujmując widać jakby nie wchodził.

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


-- dodano 2 cze 2012, o 09:43 --

a wystarczylo zrobic ;P - trzeba przylozyc sie bardziej do czytana specow przy pisaniu

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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 7 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