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



Teraz jest 12 gru 2024, o 13:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 120 ]  Przejdź na stronę Poprzednia strona  1, 2, 3, 4
Autor Wiadomość
PostNapisane: 10 lis 2012, o 19:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 maja 2012
Posty: 296
Lokalizacja: Chebzie Dolne
Zbananowany użytkownik

Pomógł: 6

Ok dzięki. Teraz mi to zadziałało faktycznie. Zrobiłem jak napisałeś. Zainkludowałem MK_USART, pozbyłem się tej sztucznie dodanej funkcji uart_get_str():)

Chaotycznie może to tak pisałem wszystko ponieważ na szybcika potrzebowałem odbierać stringi i to po transmisji RS485, a widać się tak nie da.
Tylko ta transmisja mnie trzyma przed skończeniem projektu.
Chciałbym właśnie użyć dobrodziejstw komend AT bo by mi to ułatwiło znacznie pracę i wiedział bym że program jest dobrze napisany a nie, że będzie się zwieszał lub coś nie zadziała.

------------------------ [ Dodano po: 21 minutach ]

To Mirku podpowiedz teraz jak do tego programu dodać teraz wysyłanie stringów po RS485.

JA robię 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.


Po rs232 ładnie chodzi, kiedy wcisne przycisk wyświetla się dany napis.

------------------------ [ Dodano po: 34 minutach ]

HAHAHAHHAHA DZIAŁA co chciałem. Pełna komunikacjaaaaaaaaaaa!!!!!

_________________
Inspekcja TV kanalizacji
Programowanie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2012, o 22:40 
Offline
Moderator
Avatar użytkownika

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

No to teraz odblokuj sobie w tej bibliotece RS485 i sprawdź na RS485 - powinno działać zakładając że masz na magistrali TYLKO dwa układy

------------------------ [ Dodano po: kilkunastu sekundach ]

no widzisz - pewnie nie odblokowałeś sobie jednej linijki w pliku *.h

_________________
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 lis 2012, o 11:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 sie 2012
Posty: 52
Lokalizacja: Toruń
Pomógł: 1

Witam.
Po lekturze tego tematu i ja chciałem coś tu dodać. A oto mój sposób na odbieranie string'ów :

w bibliotece MKUART w pliku mkuart.h pod definicjami (#define...) ,a przed deklaracjami funkcji - dodałem taki wpis:
Kod:
extern volatile uint8_t flag; // TO JEST MOJE !!


w bibliotece MKUART w pliku mkuart.c pod definicjami zmiennych - dodałem taki wpis:
Kod:
volatile uint8_t flag; // TO JEST MOJE !!!


w bibliotece MKUART w pliku mkuart.c w definicji procedury obsługi przerwania odbiorczego ISR( USART_RXC_vect ) tuż za linijką z instrukcją " data = UDR; //pobieramy natychmiast bajt danych z bufora sprzętowego ", a przed linijką z instrukcją " tmp_head = ( UART_RxHead + 1) & UART_RX_BUF_MASK; " - dodałem taki wpis:
Kod:
if(data == '\r') flag++; // TO JEST MOJE !!!



w moim programie w pliku main.c a przed funkcją " int main (void) {...} " - dodałem taki wpis:
Kod:
char tablica[17];   // bufor znakow ASCII z odczytu (taki jest bufor w funkcji "void uart_putint(int value, int radix)" biblioteki mkuart.c)
uint8_t i;    //  ilość wszystkich znaków odczytanych
char c;   // odczytany znak


w moim programie w pliku main.c w funkcji " int main (void) {...} " w pętli głównej " while(1) {...} " - dodałem taki wpis:
Kod:
if(flag) // jeżeli są odebrane dane w buforze to...
   {
      i =0;   // zerowanie licznika i
      while ((c = uart_getc()) != '\r')   // sprawdza czy koniec string'a (czy jest enter -> 0x0D)
      {
         if((i <= 17) && (c != '\n'))   // uwaga!... max. ilość znaków w string'u to 16
         {
            tablica[i] =c;   // zapis znaku do wybranej komórki w tablicy
            i++; // następna komórka w tablicy
            tablica[i] ='\0';   // ostatni znak w łańcuchu
         }//end if()...                     
      }//end while()...   
      flag--; // flaga końca odbioru danych z uart         
   }//end  if(flag)...



Chciałbym stworzyć funkcję, gdzie cały łańcuch typu string odebrany z mojego laptopa miałbym w tablicy o nazwie " tablica ", i tu moje pytanie czy taka funkcja napisana poniżej była by poprawna?.

Kod:
#define ROZMIAR 16  // rozmiar odebranych znaków wynika z bufora znaków wysłanych na port szeregowy w funkcji "void uart_putint(int value, int radix)" biblioteki mkuart.c

uint8_t tab[ROZMIAR];   // bufor tekstu
uint8_t tablica[ sizeof(tab) +1 ];  // bufor na tekst plus znak '\0'(znak końca łańcucha)


// procedura pobiera z PC łańcuch typu "String"
void PC_Text(uint8_t *tablica)   // ilość znaków w łańcuchu (minimum 1)(maximum 16)
{
    char c;         // odczytany znak
    while ((c = uart_getc()) != '\r')   // sprawdza czy koniec string'a (czy jest enter -> 0x0D)
   {
      if((sizeof(tablica++) <= ROZMIAR) && (c != '\n'))   // uwaga!... ta linijka ma pozwolić wpisać do tablicy max. 16 znaków
      {
         *tablica++ = c;   // zapis znaku do wybranej komórki w tablicy
      }//end if()...                     
   }//end while()...
   *tablica++ ='\0';   // ostatni znak w łańcuchu
}//koniec ---------------------------------------


Wdzięczny będę za każdą uwagę i ewentualne poprawienie mojej funkcji.
Piotr



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2012, o 12:43 
Offline
Moderator
Avatar użytkownika

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

W dobrym kierunku idziesz oczywiście, ale jednak polecam lekturę ostatniego rozdziału drugiej książki:

http://atnel.pl/jezyk-c-pasja-programowania.html

dlatego, że podkreślam! .... warto używać zdarzeń (EVENTS) do obsługi odbieranych łańcuchów ASCII. A w tej książce dokładnie wyjaśniam o co chodzi.

_________________
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 lis 2012, o 18:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 sie 2012
Posty: 52
Lokalizacja: Toruń
Pomógł: 1

Dziękuje za odpowiedź.
O zdarzeniach (EVENTS) z drugiej książki sobie poczytam, ale na razie do komunikowania się z laptopem z moją aplikacją napisaną w języku java SE przez port RS232 zupełnie wystarczy mi wyżej opisana procedura PC_Text(tablica).

Piotr



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2013, o 07:00 
Offline
Nowy

Dołączył(a): 28 kwi 2013
Posty: 15
Pomógł: 0

Witam. Z góry przepraszam za ogromną ilość treści... Jestem tutaj nowy, a nie chciałem zaśmiecać forum nowym tematem. Na wstępie pragnę wszystkich powitać. Swoją przygodę z mikrokontrolerami zacząłem na studiach niecałe pół roku temu. Było to programowanie 8051, jednakże na gotowych bibliotekach, co nie nauczyło mnie zbyt wiele. Około miesiąc temu zacząłem ostro naukę na AVRach.
W ramach projektu na zaliczenie mam za zadanie stworzyć dwie płytki elektroniczne do komunikacji po bluetooth. Jedna z czujnikami( wstępnie DS18B20) i druga z wyświetlaczem LCD. Projekt prosty, jednak dopiero się uczę więc jak łatwo zgadnąć napotykam problemy. Posiadam obydwie książki Pana Mirka, jednak nie mam do nich płyt. Jestem więc skazany na pisanie własnych bibliotek na podstawie książek.
Chciałbym prosić o pomoc w rozwiązaniu problemu z biblioteką USART, nad którą siedzę już kilka dni i która nie daje mi spać po nocach, gdyż chciałbym już uzyskać komunikację po bluetooth.

Problem polega na tym, że działa wysyłanie stringów, oraz znaków, jednak nie działa nawet najprostszy odbiór znaku. Czy warunek zapełnienia bufora jest spełniony, czy tez nie, następuje ciągłe wypisywanie zer w terminalu. Gdy w międzyczasie wysłać znak, zostanie on wypisany, lecz ciągle w otoczeniu zer.

Po nieudanych próbach i wyrywanych włosach na głowie, skorzystałem z gotowej biblioteki UART Pana Petera Fleury, która jest ogólnie dostępna i przerobiłem ją pod własny użytek. Wtedy zaczął działać zarówno odbiór jak i wysyłanie pełnych stringów. Porównuję obie biblioteki i niestety ale już nie mam pomysłu, co może być źle w bibliotece napisanej na podstawie książki :(
Nie chcę pokazywać całego kodu bibliotek, bo zajęłoby to sporo miejsca, pokażę zatem kod przerwań i funkcji odbioru.
Proszę o pomoc w rozwiązaniu problemu oraz zrozumienie, gdyż dopiero zaczynam swoją zabawę z mikrokontrolerami AVR.


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




main
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 28 kwi 2013, o 07:14 przez blooddiamond, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2013, o 07:11 
Offline
Moderator
Avatar użytkownika

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

Witamy na forum, ale panie kolego, biblioteki z książek nie są po to aby umieszczać je na forach:

blooddiamond napisał(a):
Nie chcę pokazywać całego kodu bibliotek, bo zajęłoby to sporo miejsca, pokażę zatem kod przerwań i funkcji odbioru.


Więc taka moja gorąca prośba - poza samymi plikami main.c które są czy w książkach czy na dołączonych do nich płytach DVD proszę nawet nie myśleć o udostępnianiu na jakichkolwiek forach tych treści inaczej to po co ja mam pisać książki, a kilka osób udostępni wszystko na forach ? Pomyślał kolega o tym ?

Biblioteki z książek działają, czasem są do nich aktualizacje ale akurat ta z zielonej do obsługi UART działa ślicznie. A jeśli koledze nie działa, to proszę się skupić na tym czego kolega nie rozumie i pokazując najwyżej fragment 2-3 linie z biblioteki dopytać o co chodzi .... Tu na tym forum praktycznie każdy posiada wspomniane książki, ja także więc każdy może zajrzeć i coś podpowiedzieć.

Mogę liczyć na takie podejście?

_________________
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: 28 kwi 2013, o 07:13 
Offline
Nowy

Dołączył(a): 28 kwi 2013
Posty: 15
Pomógł: 0

Przepraszam, już modernizuję swój post, jednak nie wiem, jak w takim razie mam przedstawić swój problem.. Tym bardziej, że pisałem bibliotekę na podstawie książki, ale bez biblioteki z płyty, nie mogę więc mieć pewności, że nie wkradły mi się błędy.



Ostatnio edytowano 28 kwi 2013, o 07:18 przez blooddiamond, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2013, o 07:16 
Offline
Moderator
Avatar użytkownika

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

przy okazji ja od razu podpowiem, że niepotrzebnie dorzucasz na pewno tę linię:

if(data== 0x0d) flaga++;

przeczytaj jednak dokładnie książkę - w tym przerwaniu inna linia zmienna i linia pełni tę rolę - aż się dziwię, że tego nie widzisz i zajrzysz do książki bo nawet w książce jest komentarz w kodzie, a nie wspomnę o tym że i w tekście książki do opisu tego kodu jest to wyjaśnione. Zatem troszkę dziwnie to wygląda co piszesz ....

------------------------ [ Dodano po: 1 minucie ]

blooddiamond napisał(a):
Przepraszam, już modernizuję swój post, jednak nie wiem, jak w takim razie mam przedstawić swój problem..


Zawsze możesz także jak masz szczególny problem z samą biblioteką napisać do mnie ale ....

ale jak widać z postu i tego co napisałem, nawet z książki nie przepisałeś dokładnie .... Piszesz, że nie masz płyt do książek ... ? Ale przecież w Atnelu można je nabyć po przesłaniu skanu jakiegokolwiek dowodu zakupu.

ale ok skup się na tym co ci podpowiedziałem ... bo to może być podstawowy błąd a kolejny to raczej tylko taki, że coś mocno źle korzystasz z tak napisanej biblioteki :(

------------------------ [ Dodano po: 7 minutach ]

O! a teraz zmieniłeś kod ... ale w plikach main w ogóle nie korzystasz z tego co było opisane w zielonej książce tylko jakby z tego co w niebieskiej - to nie będzie działać tak na krzyż za bardzo bez poważnych zmian. To jedno. A drugie .... no jeśli masz niebieską książkę to tam jest WYRAŹNIE napisane żeby nie używać _delay_ms() i to SZCZEGÓLNIE gdy się odbiera dane ...a ty co masz?

_delay_ms(1000);

:(

na prawdę coś czuję, że albo musisz najpierw więcej na temat podstaw C poczytać i to wystarczy w tych książkach, porobić wcześniejsze ćwiczenia - bo na razie to wygląda tak jakbyś na gwałt próbował coś szybko w kodzie sklecić nie rozumiejąc do końca jak to działa :( ... pewnie dlatego na razie ci to nie wychodzi. A jak mówię w książkach masz dokładnie całe kody opisane i to krok po kroku. Więc staraj się to zrozumieć - a jak się zatniesz to wtedy ŚMIAŁO pisz i pytaj na forum ... czy na maila jak musisz pokazywać większą część kodu bibliotek.

_________________
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: 28 kwi 2013, o 07:26 
Offline
Nowy

Dołączył(a): 28 kwi 2013
Posty: 15
Pomógł: 0

mirekk36 napisał(a):
przy okazji ja od razu podpowiem, że niepotrzebnie dorzucasz na pewno tę linię:

if(data== 0x0d) flaga++;

przeczytaj jednak dokładnie książkę - w tym przerwaniu inna linia zmienna i linia pełni tę rolę - aż się dziwię, że tego nie widzisz i zajrzysz do książki bo nawet w książce jest komentarz w kodzie, a nie wspomnę o tym że i w tekście książki do opisu tego kodu jest to wyjaśnione. Zatem troszkę dziwnie to wygląda co piszesz ....

------------------------ [ Dodano po: 1 minucie ]

blooddiamond napisał(a):
Przepraszam, już modernizuję swój post, jednak nie wiem, jak w takim razie mam przedstawić swój problem..


Zawsze możesz także jak masz szczególny problem z samą biblioteką napisać do mnie ale ....

ale jak widać z postu i tego co napisałem, nawet z książki nie przepisałeś dokładnie .... Piszesz, że nie masz płyt do książek ... ? Ale przecież w Atnelu można je nabyć po przesłaniu skanu jakiegokolwiek dowodu zakupu.

ale ok skup się na tym co ci podpowiedziałem ... bo to może być podstawowy błąd a kolejny to raczej tylko taki, że coś mocno źle korzystasz z tak napisanej biblioteki :(


1. Zmienną wprowadziłem jako pomoc dla siebie, gdyż łapałem się już wielu sposobów na pozbycie się ciągłego nadawania zer przez moduł UART, ale wiem, że w tym celu została wprowadzona zmienna "ascii_line"
2. Co do płyt.. kupiłem książki używane od starszego kolegi ze studiów, który niestety płyt mi nie dał..

Głupio się czuję, ale czytam książki, siedzę nad tym już któryś dzień i jestem podłamany :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2013, o 08:11 
Offline
Moderator
Avatar użytkownika

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

blooddiamond napisał(a):
1. Zmienną wprowadziłem jako pomoc dla siebie, gdyż łapałem się już wielu sposobów na pozbycie się ciągłego nadawania zer przez moduł UART, ale wiem, że w tym celu została wprowadzona zmienna "ascii_line"


Ale posłuchaj - czy ja mam dla ciebie przeglądać książkę i podawać ci na której stronie co jest opisane ? ;) Nie no rozbroiłeś mnie tym zdaniem - dlatego wyjątkowo podam ci stronę(-y) ;)

- str. 401 - kod z komentarzem
- str. 401 i 402 - opis kodu a w nim tego co robi ascii_line

na prawdę nie mogę się domyśleć co to znaczy że "łapałeś się już wielu sposobów" skoro masz to jak byk opisane w książce. A gdybyś chciał zrobić odbiór tak jak teraz zmieniłeś kod (ale bez tych _delayów) ... to i w pierwszej książce masz przykłady - zajrzyj do rozdziału o projekcie wielozadaniowym.


blooddiamond napisał(a):
2. Co do płyt.. kupiłem książki używane od starszego kolegi ze studiów, który niestety płyt mi nie dał..

No to jeszcze raz powtórzę, takie płytki DVD można dokupić w Atnelu, wystarczy się skontaktować na maila czy telefonicznie - koszt jednej to 12zł z tego co pamiętam.

blooddiamond napisał(a):
Głupio się czuję, ale czytam książki, siedzę nad tym już któryś dzień i jestem podłamany :(


no a co powiesz na te numery stron które wyżej podałem ? nie ma tego tam opisanego ?

_________________
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: 28 kwi 2013, o 16:28 
Offline
Nowy

Dołączył(a): 28 kwi 2013
Posty: 15
Pomógł: 0

Owszem jest. Chodzi o to, że tworząc bibliotekę na podstawie książki (słowo w słowo), terminal zasypywał mi się samymi znakami " <0> " , gdy wywoływałem funkcję uart_get_str. Od razu wieszał mi się terminal, co stwarzało kłopoty więc stąd ten delay, abym mógł przerwać połączenie, zanim wszystko się zatnie. Próbowałem więc modyfikować kod, jak widać nie udanie, przez co wychodzę teraz na głupca...

A jeśli jest możliwość dokupienia płyt, to na pewno się zgłoszę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2013, o 16:54 
Offline
Moderator
Avatar użytkownika

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

Na żadnego głupca nie wychodzisz - skąd takie jakieś myśli dziwne ...

po prostu próbuj po kolei , najpierw spróbuj z samym nadawaniem. Bo nie wiem od czego mógł ci się terminala zawieszać od get_str

zresztą - może inaczej - po kolei, i zdecyduj się co po kolei chcesz robić. Najpierw pokaż mi tu kawałek swojego kodu na nadawanie do terminala - np wysyłanie jakiegoś tekstu co sekundę (wtedy możesz użyć _delay_ms() ) .... i powiedz czy ci to działa

bo tak? to nawet nie wiadomo co i jak ty konfigurujesz i robisz. Jaki masz sprzęt - pokaż jakiś schemat na czym to testujesz itp

wtedy będzie można pomóc - a nie na zasadzie, że robię wszystko wg książki i nie działa bo to jest bez sensu. Przecież programujesz procesor a nie na komputerze. Tu możesz 100 baboli już w samej elektronice popełnić po drodze ...

więc jak będziesz miał gotowy krótki programik do wysyłania do terminala obojętnie czy na bibliotekach z zielonej czy niebieskiej to go tu wklej (ale bez bibliotek) tylko main.c który sam napiszesz ok? to coś pewnie uda się pomóc

_________________
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: 28 kwi 2013, o 17:21 
Offline
Nowy

Dołączył(a): 28 kwi 2013
Posty: 15
Pomógł: 0

Działam na ATmega16A, na prostej płytce testowej zasilanej napięciem 5V, z wyprowadzeniami wszystkich pinów, programator USBasp oraz przejściówka USB->RS232 TTL. Do tego podpięty wyświetlacz lcd. Wcześniej robiłem ćwiczenia z niebieskiej książki i nie było problemów.
Funkcje nadawania stringów oraz liczb działają bez problemu:

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


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


------------------------ [ Dodano po: 39 minutach ]

Poczytałem jeszcze trochę w książkach, posiedziałem i już mi wszystko działa :) teraz zabieram się za obsługę odbioru poprzez zdarzenie EVENT.


Przepraszam za problem :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 kwi 2013, o 18:33 
Offline
Moderator
Avatar użytkownika

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

Żaden problem ;) to się bardzo cieszę .... a najbardziej z tego że zabierasz się za to z EVENT'ami bo to jest najbardziej mniamniuśna i wygodna obsługa RS232 ;)

A jak coś będzie niejasne to śmiało pytaj - po to jest to forum ... zresztą sam widzisz - czasem wystarczy przejść drobny moment gdzie się zatniemy a potem idzie z górki.

_________________
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: 29 kwi 2013, o 21:12 
Offline
Nowy

Dołączył(a): 28 kwi 2013
Posty: 15
Pomógł: 0

Poproszę o radę, jak zrealizować wysyłanie temperatury z czujnika DS18B20 z jednego uP na drugi, posługując się interfejsem UART.
Czy wysyłam po kolei 3 stringi (znak temp, część jednostek, część dziesiętna), odbieram po kolei każdy string i wtedy wyświetlam całość na wyświetlaczu ?
Czy powinienem zmodyfikować przerwanie odbiorcze, skoro nie wysyłam znaku CR, tak jak z terminala ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 kwi 2013, o 21:17 
Offline
Moderator
Avatar użytkownika

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

A dlaczego niby masz nie wysyłać znaku CR ?

Może nie zrozumiałeś na czym polega transmisja ASCII i jej prostota ?

No właśnie na tym, że wyraźnym separatorem ramek jest właśnie znak CR albo znaki CRLF

więc jeśli robisz komunikację między dwoma prockami to z jakiej paki chcesz je pomijać ??? tzn jak chcesz to pomijaj ;) nikt ci nie broni i wymyślaj koło od nowa ;)

tylko po co? skoro wszędzie można ten sam standard wykorzystywać. Zobacz sobie jak gadają np modemy GSM/GPRS albo moduły GPS - no wszystko posługuje się na końcu znakiem CR .... a ty chcesz sobie to zmieniać ? :) no jak mówię - możesz - zrób sobie np separator w postaci znaku np # tylko jeszcze raz zapytam PO CO ? Lubisz sobie komplikować na siłę życie ? ;) skoro już masz gotowe i działające biblioteki ? ..... tak tylko pytam

_________________
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: 30 kwi 2013, o 13:26 
Offline
Nowy

Dołączył(a): 28 kwi 2013
Posty: 15
Pomógł: 0

Dobrze, rozumiem :) Wysyłając np dane z wielu czujników poprzez USART, jak mogę rozróżnić podczas odbioru, które dane są z którego czujnika, gdy dane wlatują do bufora odbiorczego co sekundę ? na podstawie wartości zmiennej ascii_line, czy muszę jakoś porównywać stringi ??
Moje pytania pewnie wydają się śmieszne, ale właśnie dlatego piszę na tym forum, by nie zostać wyśmianym, a naprowadzonym na dobry tor myślenia..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 kwi 2013, o 13:54 
Offline
Moderator
Avatar użytkownika

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

Ale teraz to może coś namieszałeś sobie .... bo jak to dane z wielu czujników przez USART, panie kolego USART czyli RS232 to połączenie 1:1 a nie 1:wielu .....to podstawa

nie jesteś w stanie podłączyć wielu czujników do procka przez jeden USART a nawet jak podłączysz to będziesz miał mega konflikty gdy kilka zacznie nadawać w tym samym czasie.

Zatem nawet nie da się odpowiedzieć na twoje pytanie - jak rozpoznawać dane z konkretnego czujnika

------------------------ [ Dodano po: kilkunastu sekundach ]

chyba że ja coś źle zrozumiałem?

_________________
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: 30 kwi 2013, o 14:13 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

blooddiamond jeśli będziesz miał dwa AVR-ki z czego jeden będzie obsługiwał czujniki a drugi będzie przetwarzać te nadlatujące dane to jak najbardziej że będziesz mógł rozpoznać z którego czujnika nadlatuje temperatura z tym że musisz odpowiednio uformować ramkę danych tj. uzupełnić ją o numer seryjny czujnika albo i/lub jakąś flagę np. s01 - dla pierwszego czujnika a s02 dla drugiego. Jednak jeśli chcesz mieć kilka urządzeń z komunikowanych o RS232 to nie będzie działać. Wtedy na ratunek przyjdzie RS485, tam możesz sobie ładnie podłączyć kilka urządzeń i mogą sobie rozmawiać i w tym wypadku również możesz zrobić rozpoznawanie skąd nadlatuje temepratura po numerze seryjnym lub jakiejś fladze.

Pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 kwi 2013, o 14:17 
Offline
Nowy

Dołączył(a): 28 kwi 2013
Posty: 15
Pomógł: 0

Mam już komunikację po bluetooth (w sznurku) między dwoma układami tj: płytkami elektronicznymi, z czego mózgami są Atmegi8. I teraz podłączam do jednej płytki dwa czujniki temperatury. Chcę przesyłać te dane z jednej płytki na drugą. W późniejszym etapie możliwe że dojdzie czujnik wilgotności i zastanawiam się jak tyle różnych danych wysyłać z jednego uP do drugiego.

------------------------ [ Dodano po: 3 minutach ]

MichalXY napisał(a):
blooddiamond jeśli będziesz miał dwa AVR-ki z czego jeden będzie obsługiwał czujniki a drugi będzie przetwarzać te nadlatujące dane to jak najbardziej że będziesz mógł rozpoznać z którego czujnika nadlatuje temperatura z tym że musisz odpowiednio uformować ramkę danych tj. uzupełnić ją o numer seryjny czujnika albo i/lub jakąś flagę np. s01 - dla pierwszego czujnika a s02 dla drugiego.


dokładnie tak :)
nie mam tylko pomysłu jak tą ramkę uformować i odbierać...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 kwi 2013, o 14:24 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

No to zrób sobie ramkę danych:

Kod:
numer_seryjny_czujnik1, temperatura_czujnik_1, numer_seryjny_czujnik2,temepratura_czujnik_2


albo załatw to komendami AT, czyli układ odbiornika ten który ma zebrac te dane pyta o temperatury z czujnika np. zapytanie o temperaturę którą mierzy pierwszy czujnik AT+TMP_1? no a wtedy nadajnik odpowiada AT+TMP_1=36 z tym że w obu tych przypadkach musisz ogarnąć odbieranie łańcuchów i ich analizowanie, przez odpowiednie funkcję którę są w jezyku C.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 kwi 2013, o 14:33 
Offline
Nowy

Dołączył(a): 28 kwi 2013
Posty: 15
Pomógł: 0

A czy zadziała coś takiego? :
- odczyt temperatury z czujnika 1 , gdy odczyt OK, ustaw flagę na 1, wyślij znak 1 i dane przez USART
- odczyt temperatury z czujnika 2 , gdy odczyt OK, ustaw flagę na 2, wyślij znak 2 i dane przez USART
drugi uP:

jeśli odebrano znak 1 -> ustaw flagę na 1, odbieraj dane i wyświetlaj jako Temperatura1, zeruj flagę
jeśli odebrano znak 2 -> ustaw flagę na 2, odbieraj dane i wyświetlaj jako Temperatura2, zeruj flagę



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 kwi 2013, o 14:45 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Tak zadziała to tylko zachęcam cię abyś w przyszłości wykorzystał komendy AT bo też są fajne ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 kwi 2013, o 14:57 
Offline
Nowy

Dołączył(a): 28 kwi 2013
Posty: 15
Pomógł: 0

małymi krokami dojdę do wszystkiego ;)
dziękuję za rady :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2013, o 17:36 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

Witam

Dziś zabrałem się za uarta i już mniej więcej ogarniam temat, ale mam kłopot z Putty, otóż z jakiegoś powodu nie chce wysyłać znaków do uC (odbiera poprawnie). Sprzętowo jest wszystko ok i poniższy program działa w obie strony np. z programem Terminal 1.9b. Pewnie to jakaś opcja w samym putty, ale już za bardzo nie mam pomysłu.
Usunięcie ustawień z rejestru nie pomaga, a np. telnet działa poprawnie w obie strony.

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


Edit:
Zauważyłem że putty wysyła wpisane znaki dopiero w momencie zamknięcia terminala.
Jakieś pomysły?

Edit:
Heh, restart komputer pomógł.
Jednak putty nie jest takie super 8-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2013, o 19:37 
Offline
Moderator
Avatar użytkownika

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

#ciamciak# napisał(a):
Edit:
Heh, restart komputer pomógł.
Jednak putty nie jest takie super 8-)


tak tak - oczywiście ;) putty jest do niczego, dlatego tak często go używam, i pewnie restratuję co chwilę kompa żeby przesłać jakieś znaki z procka do terminala i odwrotnie ... jasna sprawa - putty tak ma, to najgorszy program na świcie ;) hyhyhy wspaniałe wnioski ;) - zobacz np tutaj jak ja się z nim "męczę" ;)

http://mirekk36.blogspot.com/2013/05/te ... z-lcd.html

_________________
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: 19 lis 2015, o 14:47 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Witajcie.
Siedzę nad odbieraniem sygnału z GPSa po RS232 i niestety nic mi nie wychodzi.
Znalazłem ciekawy przykład w Bluebooku na temat odbierania danych z UDP i wskażnika z dwoma buforami (buf i reszta) i próbuje to zaimplementować do odebrania ramki.
Pasowałoby to idealnie, ale zanim do tego przejdę jak sprawdzić czy sprzętowo to będzie działało - bo tutaj może być problem.

Podłączyłem do GPSa zasilanie i odbiera sygnał z satelity.
Prędkość 9600
Podłączyłem bezpośrednio pod terminal komputerowy i pokazuje dane
Podłączyłem sygnał z GPS-TX do PD0 (RXD) i BTM222 do PD1
Tak na szybko chciałbym żeby wszystko co wleci na RXD było przekazywane na TXD - wtedy będę wiedział że wszystko hula

Pobrałem bibliotekę MKUART i main.c wygląda tak
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i powinno cokolwiek wyświetlać z bufora i niestety nic nie wyświetla. Zastanawiam się czy w ogóle można tak podłączyć - stąd pytanie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lis 2015, o 15:42 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

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

Bazuje na callback'u
a u Ciebie tej funkcji nie ma lub jej nie zarejestrowałeś.
To z kolei oznacza, że zdarzenie od UART'a nie będzie się wykonywać.

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lis 2015, o 17:02 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

OK - będę szukał innego rozwiązania, ale na tą chwilę wiem, że działa odbieranie danych bo
dopisałęm 2 linijki do wektora przerwań zaraz za data = UDR;
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i teraz co sekundę jak przychodzą dane z GPSu to miga dioda i uart_putc wysyła na TXD sygnał do komputera :)
co prawda nie wiem dlaczego zaraz po zaprogramowaniu i po długim resecie to nie działą - tak jakby ATB się zwiesił, ale po krótkim resecie działa.
Czyli GPS nadaje do ATB a ATB do komputera.



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ę Poprzednia strona  1, 2, 3, 4

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