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



Teraz jest 18 sie 2026, o 04:02


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 30 paź 2014, o 19:16 
Offline
Nowy

Dołączył(a): 03 kwi 2014
Posty: 16
Pomógł: 0

Mam taki problem związany z dość starym tematem dokładnie chodzi mi o ten: topic968.html. Bardzo przydatne by mi było to ale już na samym początku poległem.. Problem polega na tym że moja komunikacja wygląda następująco:

Wysyłam 4 razy ten sam łańcuch znaków, poprawnie jest tylko za pierwszym razem po zresetowaniu mikroprocesora
Obrazek



mój kod to dokładnie to samo co znajdowało się we wspomnianym temacie, dodam tylko że posiadam atmege 8 z wewnętrznym oscylatorem ustawionym na 8MHz
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 paź 2014, o 21:49 
Offline
Użytkownik

Dołączył(a): 02 cze 2014
Posty: 123
Pomógł: 0

To na początek sprawdź samo wysyłanie do kompa bo tam masz jeszcze odbieranie w pętli. Zrób to tak na początek:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

To wyeliminujesz błędy w plikach UARTA i sprzętowe.
Ale co ważne nie wiem czy uart działa poprawnie na wewnętrznym oscylatorze przejdź na kwarc. Sam nie testowałem na wewnętrznym ale to może być również źródło problemów.
I coś więcej mógłbyś opisać o swoim fragmencie kodu co chcesz nim zrobić.

Miłego sprawdzania :)

_________________
http://mojekonstrukcje.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2014, o 01:15 
Offline
Nowy

Dołączył(a): 03 kwi 2014
Posty: 16
Pomógł: 0

Dzięki za odpowiedź :)
a więc tak, dałem kwarc 16 MHz ale to nic nie zmieniło, tylko tyle że inne krzaki. Program sprawdzający wysyłanie do kompa działa super, tak jak powinien.
A docelowo chciał bym zrobić coś takiego żeby w przerwaniu sprawdzać czy mam konkretny interesujący mnie łańcuch znaków i zwrócić flagę do pętli głównej, a w pętli głównej zapisać ten łańcuch do tablicy.
Drugą częścią ma być również sprawdzenie w przerwaniu ale pojawienie się jednego konkretnego znaku po którym zostanie wysłany odebrany wcześniej łańcuch.
Mam nadzieje że nie zamieszałem za bardzo :)
Po przeczytaniu bluebooka, kilku tematów na forum i trochę zabawy z tym wydaje mi się że to nie jest trudne do zrealizowania, ale mam własnie ten problem z którym nie mogę sobie poradzić..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2014, o 01:19 
Offline
Nowy

Dołączył(a): 27 paź 2014
Posty: 11
Pomógł: 0

Jaki to jest procek ?. Daj kod inicjalizacji UARTA :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2014, o 01:37 
Offline
Nowy

Dołączył(a): 03 kwi 2014
Posty: 16
Pomógł: 0

Procek to Atmega 8

kod inicjalizacji jest wprost z bibliotek Pana Mirka

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: 31 paź 2014, o 01:50 
Offline
Nowy

Dołączył(a): 27 paź 2014
Posty: 11
Pomógł: 0

cyru napisał(a):
Procek to Atmega 8

kod inicjalizacji jest wprost z bibliotek Pana Mirka

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


Inicjalizacja wydaje się ok o ile wartość baud jest dobrze wysyłana... Ta zmienna flag co powoduje ??
A bez tej linijki wszystko działa dobrze ? : while( (c=uart_getc()) != 0x0d) uart_putc(c); ( jest bez krzaczków ? ) Może twoje putty coś "gratis" wysyła



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2014, o 02:12 
Offline
Nowy

Dołączył(a): 03 kwi 2014
Posty: 16
Pomógł: 0

Dzięki za sprawdzenie inicjalizacji, nigdy nie jestem tego pewien bo wiem że to było pisane przez Pana Mirka pod atmege32.
Odnośnie zmiennej flag to w przerwaniu
Kod:
ISR( USART_RXC_vect )

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

i wtedy w pętli głównej realizuje się to odbieranie i wysyłanie.

Bez linijki: while( (c=uart_getc()) != 0x0d) uart_putc(c); działa tak jak powinno, za każdym razem wysyła mi stan flagi.
Nad putty myślałem i sprawdziłem w innym programie i jest to samo..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2014, o 02:23 
Offline
Nowy

Dołączył(a): 27 paź 2014
Posty: 11
Pomógł: 0

Daj mi jeszcze definicje funkcji uart_getc() ona bierze z jakiegoś bufora te znaki ??
A co do ISR RXC UART'a to co potem się z tą zmienną 'data' dzieje ?? odbiera znak a potem co z nim robi ?? bo z tego co widzę to kod jest niepełny (klamerki brak) ale jak by tam była to przepada bez śladu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2014, o 10:19 
Offline
Nowy

Dołączył(a): 03 kwi 2014
Posty: 16
Pomógł: 0

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


a odnośnie 'data' w przerwaniu to potem jest wpisany do bufora
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: 31 paź 2014, o 11:41 
Offline
Nowy

Dołączył(a): 03 kwi 2014
Posty: 16
Pomógł: 0

Walczę ciągle z tym, jeszcze przyszło mi do głowy żeby wymienić procka, ale niestety na innym procku jest to samo, czyli problem procesora odpada..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2014, o 11:57 
Offline
Moderator
Avatar użytkownika

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

Polecam zajrzeć do ostatniego rozdziału Greenbooka ... sporo się wyjaśni jak w ogóle warto podchodzić do odbierania stringów i to w oparciu o EVENTS (zdarzenia) a dodatkowo callbacki

_________________
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: 31 paź 2014, o 14:16 
Offline
Nowy

Dołączył(a): 03 kwi 2014
Posty: 16
Pomógł: 0

mirekk36 napisał(a):
Polecam zajrzeć do ostatniego rozdziału Greenbooka ... sporo się wyjaśni jak w ogóle warto podchodzić do odbierania stringów i to w oparciu o EVENTS (zdarzenia) a dodatkowo callbacki


niestety jeszcze nie posiadam Greenbooka, poki co muszę sobie radzić z Bluebookiem



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2014, o 14:21 
Offline
Moderator
Avatar użytkownika

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

cyru napisał(a):
mirekk36 napisał(a):
Polecam zajrzeć do ostatniego rozdziału Greenbooka ... sporo się wyjaśni jak w ogóle warto podchodzić do odbierania stringów i to w oparciu o EVENTS (zdarzenia) a dodatkowo callbacki


niestety jeszcze nie posiadam Greenbooka, poki co muszę sobie radzić z Bluebookiem


Jasne to spójrz wyżej na propozycję kolegi Antystatycznego na przykład

_________________
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: 31 paź 2014, o 15:20 
Offline
Nowy

Dołączył(a): 27 paź 2014
Posty: 11
Pomógł: 0

cyru napisał(a):
Tak, na to wygląda że z bufora
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


a odnośnie 'data' w przerwaniu to potem jest wpisany do bufora
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Spójrz na tą linijkę:
while( (c=uart_getc()) != 0x0d) uart_putc(c);

Jeśli twój UART nie zdąży (a to jest pewne na bank) odebrać żadnego znaku (nic się nie doda do bufora) to powinien ciebie program spamować samymi '0' (ta linijka: if ( UART_RxHead == UART_RxTail ) return 0;).
Ale z jakiejś przyczyny wysyła śmieci, czyli wysyła to co jest w buforze.
Przy inicjacji zmiennych Tail i Head masz zera ??
Albo czasami zdefiniowany bufor nie jest za mały na maksymalną "długość ogona i głowy" ?? i czytasz z pamięci która do ciebie nie należy ??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2014, o 21:36 
Offline
Użytkownik

Dołączył(a): 02 cze 2014
Posty: 123
Pomógł: 0

to teraz zrób próbę komunikacji Komp ---> AVR
Czyli wysyłasz z kompa literkę X to zapala Ci diodę a jak wyślesz Y to ją zgasisz.
Musisz jeszcze zadeklarować pin do diody itp.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
http://mojekonstrukcje.pl/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2014, o 19:47 
Offline
Nowy

Dołączył(a): 03 kwi 2014
Posty: 16
Pomógł: 0

borcio992 napisał(a):
Spójrz na tą linijkę:
while( (c=uart_getc()) != 0x0d) uart_putc(c);

Jeśli twój UART nie zdąży (a to jest pewne na bank) odebrać żadnego znaku (nic się nie doda do bufora) to powinien ciebie program spamować samymi '0' (ta linijka: if ( UART_RxHead == UART_RxTail ) return 0;).
Ale z jakiejś przyczyny wysyła śmieci, czyli wysyła to co jest w buforze.
Przy inicjacji zmiennych Tail i Head masz zera ??
Albo czasami zdefiniowany bufor nie jest za mały na maksymalną "długość ogona i głowy" ?? i czytasz z pamięci która do ciebie nie należy ??


Przy inicjacji zmiennych mam zera, znaczy nie było ich ale już mam i nic to nie zmieniło.. odnośnie czytania z pamięci tej co do mnie nie należy to możliwe że tak jest, mógł by to być dobry trop, ale nie wiem jak temu zapobiec. Zaraz będę próbował innego sposobu odebrania konkretnej długości stringa, może to się uda.

------------------------ [ Dodano po: 15 minutach ]

Antystatyczny napisał(a):
Ja to robię w tern sposób:

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



Mam pytanie odnośnie tego sposobu, za co w tej funkcji jest odpowiedzialna zmienna usart_nr?

------------------------ [ Dodano po: 49 minutach ]

Na szybko zrobiłem trochę innym sposobem, ale efekt podobny.. Zrobiłem żeby odebrać łańcuch na 10 znaków, nadal tylko pierwszy jest poprawnie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Efekt:
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2014, o 21:56 
Offline
Nowy

Dołączył(a): 27 paź 2014
Posty: 11
Pomógł: 0

Daj mi jeszcze definicje bufora uarta i obliczenie maski ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2014, o 23:42 
Offline
Nowy

Dołączył(a): 03 kwi 2014
Posty: 16
Pomógł: 0

Definicje:

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

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