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



Teraz jest 11 gru 2024, o 20:06


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 120 ]  Przejdź na stronę 1, 2, 3, 4  Następna strona
Autor Wiadomość
PostNapisane: 1 kwi 2012, o 17:41 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

Jako, że biblioteka z książki umożliwia odbieranie tylko pojedynczych znaków postanowiłem stworzyć coś, co odbierze cały string na przykład do wyświetlenia na LCD.

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

Funkcja powinna zczytywać znaki aż do wystąpienia '\n' i zapisywać je w tablicy.
Następnie chciałem wyświetlić string który przyszedł:

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


Zamysł chyba mam dobry, niestety próba wprowadzenia go w życie powoduje wyświetlanie krzaków zaraz po włączeniu układu, wysyłanie czegokolwiek nic nie wyświetla w konsoli.
Proszę o podpowiedź gdzie popełniam błąd.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 kwi 2012, o 20:03 
Offline
Moderator
Avatar użytkownika

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

No błędów robisz kilka. Bo po pierwsze czy sprawdziłeś jak działa funkcja urat_getc() ? To jest funkcja nieblokująca - i jeśli nic nie ma w buforze to ona po prostu zwróci zero..... a ty czekasz w pętli na znak '\n' ..... więc od samego początku gdy nic nie ma w buforze wciąż tylko zerujesz tablicę :(

Poza tym jak już nawet ją napiszesz to zanim wywołasz najpierw musisz wiedzieć tzn być pewnym że w buforze znajduje się jakiś string prawda ? albo przynajmniej brać to pod uwagę. Zależy jak chcesz napisać tę funkcję, czy ma być blokująca czy nie.

_________________
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 kwi 2012, o 20:33 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

Czyli lepiej zastosować:
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.

Teraz funkcja powinna czekać aż pojawią się dane do odebrania.

Czy może wypełniać tablicę wewnątrz przerwania, wtedy będzie 100% pewność, że dane do niej trafią?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 kwi 2012, o 21:04 
Offline
Moderator
Avatar użytkownika

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

Nie nie nie.... teraz to kolega zaszalał na maxa ;) szczególnie z tym kodem w przerwaniu :(

Przede wszystkim to pytanko czy posiadasz moją książkę ? Przecież tam masz przykładowe kody obsługi przerwań i to z użyciem buforów cyklicznych - a ty co, teraz chcesz się ich pozbyć i od nowa budować obsługę przerwania w jakiś sposób?

No owszem - można. Przecież obsługę UART'a można zrobić na milion sposobów a ten, który ja prezentuję jest tylko jednym z miliona - więc nie ma przeciwwskazań. Ale może najpierw jednak - skoro to nasze pierwsze kroki to oprzeć się jednak na tym co sprawdzone ?

No bo tą drogą i z taką procedurą obsługi przerwania jak tutaj - to jakbyśmy się cofnęli do czasów sprzed powstania książki i zaczynamy wymyślać jakby koło od nowa.... Może szkoda tracić czasu na to - mając już jednak to koło i podstawowy wózek, teraz tylko trzeba wózek unowocześnić, dodać dyszel i jakiś hak holowniczy ;) .... od razu z tego ferrari nie zrobimy być może - ale przynajmniej posuniemy się do przodu. Dlatego polecam oprzeć się na tych podstawach co są w książce .... tym bardziej, że w drugiej części książki - to właśnie one zostaną rozwinięte .... a bez ich zrozumienia - ciężko będzie załapać co się dalej będzie działo.

_________________
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 kwi 2012, o 21:27 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

Przecież ja nigdzie nie napisałem kodu który bym użył w przerwaniu tylko pytałem czy wypełniać w nim tablicę:)

Mam książkę i korzystam z bibliotek z płyty CD ale w nich jest tylko funkcja odbioru pojedynczego znaku a ja chciałbym odebrać string. Buszując po internecie trafiałem na porady aby zczytywać po 1 znaku i zapisywać do tablicy.
Stąd moje pytanie jak odebrać string.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 kwi 2012, o 21:33 
Offline
Moderator
Avatar użytkownika

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

Eeeh no mi się coś pomerdało bo jakoś zobaczyłem że robisz to w przerwaniu a to bez sensu bo masz tam funkcję unsigned

char USART_Receive(void)

więc przepraszam - tak to jest że czasem człowiek widzi jedno a myśli drugie no i dostaje pomieszania wątków w procesorze ;)

No dobrze - ja bardzo rozumiem twoją potrzebę bo sam z tego na co dzień korzystam. Dlatego taka funkcja jeśli będzie miała działać jako zupełnie blokująca (czyli czekamy aż ktoś wklepie tekst i wciśnie enter na terminalu) to powinna zadziałać przecież ....

no właśnie tylko będzie to totalnie blokujące niestety :(

dlatego rozważ inną możliwość. W przerwaniu, które masz pokazane na DVD sprawdzaj czy nadleciał znak Enter. Jeśli nadleciał to znaczy że masz w buforze cyklicznym łańcuch - a to oznacza wprost że możesz go pięknie stamtąd odessać zwykłą funkcją uart_getc() prawda ?

Myślę że to będzie dobry trop

_________________
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 kwi 2012, o 21:58 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

No i tego mi było trzeba właśnie:)

Już nie będę pisał kodu ale tak w punktach wypiszę plan działania, proszę o ewentualne poprawienie.
1. Sprawdzenie w przerwaniu czy wystąpiło '\n', jeśli tak to flaga=1;
2. W pętli while jeśli flaga == 1, to uart_putc(uart_getc());
3. Wyzerowanie flagi;



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 kwi 2012, o 22:12 
Offline
Moderator
Avatar użytkownika

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

odpowiem krótko - BINGO ;) tzn tylko ten punkt drugi rozbudowałbym o jakąś funkcję która pobierze ten string cały z buforka cyklicznego.

_________________
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: 6 kwi 2012, o 18:52 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

No więc tak:
W przerwaniu
Kod:
ISR( USART_RXC_vect )
dopisałem
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


Sukces jest częściowy bo raz pojawi się string który wysłałem a raz krzaki.
Czy dobrym tropem jest czyszczenie bufora po każdorazowym odebraniu stringa?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 kwi 2012, o 21:24 
Offline
Moderator
Avatar użytkownika

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

A po co czyścić ? przecież on sam się oczyszcza ;) .... głowa się zrównuje z ogonem .... tam nic nie zostaje po odczytaniu łańcucha. A zmienną flag zamiast ustawiać na 1 w przerwaniu to sobie inkrementuj - i zawsze będziesz miał taką wartość ile łańcuchów wpadło do bufora.....

to że masz krzaki może być powodowane jeszcze setką innych rzeczy no i przede wszystkim tym, że nie wiem czy pozbywasz się tych znaków 0x0d oraz 0x0a ???? bo to też trzeba uwzględnić przecież.

aha no i napisać odpowiednią funkcję do odebrania stringa a ty przcież wywołujesz tylko pojedynczo uart_getc(), która pobiera jeden znak i już.

_________________
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 kwi 2012, o 16:19 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

Z powodu wyjazdu nie mam możliwości podłączenia układu ale wymyśliłem coś takiego:

W przerwaniu
Kod:
ISR( USART_RXC_vect )

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


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


Czy dobrze kombinuję?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2012, o 17:42 
Offline
Moderator
Avatar użytkownika

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

Oj źle - coś ci się teraz pokiełbasiło - tzn chodzi mi o to co chcesz teraz wyprawiać w pętli głównej. Panie kochany jaki tam odczyt UDR ??? wszystko pokiełbasisz.... Ciebie interesuje odczyt już tylko z buforów cyklicznych znak po znaku aż do ENTER'a

Nie wspomnę już o tym męczeniu indeksów xxx_tail :(

panie - a po co masz pan funkcję uart_getc() ????? jak myślisz ?

_________________
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 kwi 2012, o 18:26 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

wywołanie uart_getc() powoduje zwracanie zawartości bufora i zmianę indeksu ogona, czyli de facto zwraca mojego stringa, zatem wywołuje ją:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Powinno wyświetlać tekst który przed chwilą wysłałem do Uc aż do momentu napotkania znaku nowej linii który pominie.
flag++ w przerwaniu zwiększa się z każdym wystąpieniem 0x0d.
Funkcja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Powoduje wyświetlanie kolejnych stringów które pojawiły się w buforze aż do wyzerowania flagi.
Czy tak to ma być?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2012, o 20:44 
Offline
Moderator
Avatar użytkownika

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

No właśnie w ten deseń ;)

_________________
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: 10 kwi 2012, o 19:12 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

W pliku mkuart.c mam definicję
Kod:
volatile uint8_t flag = 0;


W pliku main.c mam deklarację:
Kod:
extern volatile uint8_t flag;


W przerwaniu
Kod:
ISR( USART_RXC_vect )

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


Czyli podczas wysłania danej na Uc zmienna flag powinna się zwiększyć o 1. Niestety wyświetlanie zmiennej flag poprzez:
Kod:
uart_putint(flag, 10);

daje ciągle 0.
Gdzie popełniam błąd?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 kwi 2012, o 19:21 
Offline
Moderator
Avatar użytkownika

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

No tylko czy ty przypadkiem nie chcesz sobie wysłać tej flagi na uart tuż po tym jak odczytałeś string i ją skasowałeś ?

_________________
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: 10 kwi 2012, o 19:39 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

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

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


Wysłanie odebranego stringa pewnie też mam źle?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 kwi 2012, o 20:23 
Offline
Moderator
Avatar użytkownika

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

słuchaj - wyrzuć że z tej pętli głównej tego _delay'a

a na uart wysyłaj flagę z wewnątrz warunku - gdy ją wykryjesz a nie takie rzeczy ...

_________________
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: 10 kwi 2012, o 20:36 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

_delay był tylko żeby terminal mi się nie "zalewał" zerami, już go usunąłem.
Wyświetlanie stanu flagi wrzucone do warunku, niestety nadal wysłanie czegokolwiek do Uc nie zmienia jej stanu:/

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

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

Niestety także nie powoduje jej przyrostu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 kwi 2012, o 20:49 
Offline
Moderator
Avatar użytkownika

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

spakuj ten swój testowy projekcik do ZIP'a i podeślij mi na maila biuro malpa atnel kropka pl

_________________
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: 11 kwi 2012, o 00:13 
Offline
Moderator
Avatar użytkownika

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

Ale żeś pan zakombinował ;)

1. Jeśli w kodzie/plikach gdzieś robisz definicję

Kod:
volatile uint8_t flaga;


to po pierwsze jeśli to zmienna globalna to nie musisz jej inicjować ZEREM - zapamiętaj to sobie, bo zmienne globalne zawsze są inicjowane zerami

ale też nie rób byka w takiej postaci że w innym pliku - w tym przypadku main.c robisz do tego taką deklarację:

Kod:
extern uint8_t flaga; // BŁĄD !!!!!!!!!!!!!!!


musi być:

Kod:
extern volatile uint8_t flaga;


i dlatego oczywiście ci ta flaga nie działała - to oczywiste


Za to jeśli chodzi o twój sposób na odbiór stringa to już skoro analizuję twój kodzik, a generalnie fajnie się rozmawia z kimś kto widać, że uparcie dąży do celu i jakby nie patrzeć robi duże postępy pomimo pomyłek które się zdarzają - no cóż jesteśmy tylko ludźmi - to z miłą chęcią naprowadzam twój kod na właściwe chyba dla ciebie tory - jak chcesz mieć odpowiedź na uart po fladze to rób to w ten deseń ;)

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


no i masz efekt jak na screenschocie poniżej, widać i flagę i zwrócony ładnie tekst wpisany do termianala ;)

Obrazek

_________________
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: 11 kwi 2012, o 18:31 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

Dziękuję za napisanie funkcji wysyłającej string:)
Rozumiem, że uruchamiał Pan mój kod i wszystko działało.
Zauważyłem, że przestał mi działać odbiór. Echo jest za i przed MAXem więc jest on sprawny, kod który mam napisany wcześniej działał bez problemu, podłączenia nie zmieniałem(chociaż to i tak 2 przewody) a teraz nawet
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Nie powoduje zwrócenia wysłanego znaku, próbowałem na dwóch atmegach, w terminal v1.9b by bray++ po kliknięciu "send" dana pokazuje się w dolnym okienku. W windowsowym terminalu nawet nie mogę nic wpisać.

Podłączyłem diodę LED na podstawce Uc pod Rx, wysyłanie danych powoduje jej mruganie, więc wykluczam też przewód MAX232 <-> Uc.
Ja chyba nie uruchomię tej transmisji przez RS232 tak jakbym chciał:/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2012, o 19:42 
Offline
Moderator
Avatar użytkownika

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

Tak jak piszesz - po to prosiłem o twój kod żeby go specjalnie dla ciebie odpalić i ew poprawić - co zrobiłem i ci pokazałem przecież że działa - i to ten twój kod ;) a jedyną modyfikację zrobiłem w pętli głównej - co pokazałem wyżej.

Uruchomisz - uruchomisz - teraz to pewnie masz jakiś czeski błąd i coś ci nie styka - może płyta stykowa ? ;)



No a że to ci nie działa to się nie dziwię

USART_Receive();
USART_Transmit(UDR);

jak można wysyłać UDR gdzieś w pętli głównej....

spójrz do jakichś swoich wcześniejszych kodów albo do książki bo robisz znowu fantasmagorię ;)

a ten twój kod z moją modyfikacją co ? nie działa tobie - przecież tam też jest i nadawanie i odbiór .... więc coś kręcisz albo ci się pokręciło ;)

_________________
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: 11 kwi 2012, o 20:10 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

Płytka na pewno jest sprawna bo wsadzilem diodę do gniazda w podstawce od atmegi i migała.
Poprawiony kod od Pana niestety nie działa.

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

I cholera teraz jest wszystko w porządku tj. Uc odbiera i przesyła znak na terminal, więc wygląda to tak jakby nie zwiększał tej nieszczęsnej flagi.

Wysłałem maila z aktualną wersją kodu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2012, o 20:18 
Offline
Moderator
Avatar użytkownika

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

A no tak - ale w tym fragmencie kodu nie poprawiłem ci przecież tego brakującego volatile - który to błąd opisałem ci w poście - a ty go poprawiłeś ?

_________________
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: 11 kwi 2012, o 20:44 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

Tak, poprawiłem w pliku main.c na:
Kod:
extern volatile uint8_t flag;



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 kwi 2012, o 21:59 
Offline
Moderator
Avatar użytkownika

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

A teraz uważaj! ;)

wziąłem ten kod który mi przesłałeś po raz kolejny po poprawkach z tym volatile

NIC W NIM NIE ZMIENIAŁEM - NIC ABSOLUTNIE i zobacz co mam na terminalu ;)

Obrazek

chyba nie sugerujesz że coś kręcę ? ;)

no może jedno zmieniłem - taktowanie na 11,0592MHz bo taki kwarc mam akurat podpięty. Niecierpię kwarców mniejszych niż 12MHz .... na twoim miejscu już włączyłbym wewn. oscylator RC 8MHz i przy prędkości 9600bps też by działało ;)

co nie oznacza że twój kwarc jest zły oczywiście

.... no ale wnioski wyciągnij sam - masz jakiegoś babola albo w połączeniach albo w fusebitach, albo w ustawieniach terminala itp - bo kod działa od pierwszego kopa ;)

a to masz teraz zagwozdkę co ?

_________________
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 kwi 2012, o 12:00 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

Nie daje mi spać ten UART i siedzę już nad nim chyba 3 tydzień;)
Zakupiłem kwarce 7,3728Mhz i 11,0592MHz większych nie mieli w sklepie, spróbuję też z wewnętrznym oscylatorem, pokombinuję z fusami, zmienię przewody. W terminalu mam COM1/9600/8 bitów danych/bez parzystości/1 bit stopu/ bez handshakingu wiec raczej prawidłowo.
Czego nie zacznę kombinować z Atmegą to ciągle mam jakieś dziwne problemy;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2012, o 13:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2011
Posty: 582
Lokalizacja: okolice Wrocławia :)
Pomógł: 24

Wiem że to pewnie nie przez terminal ale profilaktycznie sprawdź może na Hercules Terminal, darmowy:

http://www.hw-group.com/products/hercules/index_en.html

jeszcze nigdy się na nim nie zawiodłem i na co dzień na nim pracuję.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2012, o 13:57 
Offline
Moderator
Avatar użytkownika

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

mlekorlz napisał(a):
Czego nie zacznę kombinować z Atmegą to ciągle mam jakieś dziwne problemy;)


No właśnie dlatego masz te problemy bo sobie to sam wmawiasz ;) zacznij pozytywnie myśleć ;) .... bo zaszedłeś już bardzo daleko z tą obsługą stringów i aż mi się micha cieszy, że sam do tego dochodzisz

teraz to co się dzieje to pewnie jakiś tzw czeski błąd i jak go znajdziesz to pewnie sam będziesz się śmiał

Poza tym - przecież łatwo sprawdzić czy działa czy nie działa samo wysyłanie albo nadawanie - zrób sobie najprostsze procedury testowe wprost z noty PDF na nadawanie i odbiór bez żadnej obsługi przerwań. To co w nocie MUSI działać - jak tak zawsze testuję i tobie oraz innym też polecam..... Bo czasem można się zakałapućkać w większym projekcie i już ręce opadają - ale wtedy powoli i spokojnie wystarczy mniejszymi kroczkami iść....

toż jak ci nie zadziałają te podstawowe procedury to masz już dużą podpowiedź - wina leży po stronie sprzętowej i tam jej szukaj - tzn połączenia ew terminal

a przy okazji odpal sobie inny terminal np PUTTY dla pewności czy coś w swoim nie namieszałeś za bardzo

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 120 ]  Przejdź na stronę 1, 2, 3, 4  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

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