Rozumiem, czyli zmienna String to jakby ciąg zmiennych bajtowych stanowiący całość i w programie instrukcja: IF zmienna_string_1znak(to jakby jedna zmienna bajtowa, tylko inaczej interpretowana, bo nie mogę do stringa w programie wpisać prosto wart. liczbowej, a jedynie literę, która reprezentuje ową wartość liczbową) = "a" then... jest równoważna...
To powinno odczytać cały bufor: Odczytaj_sprzetowy_uart: Uart_txt = "" Do 'Odbierz znak po znaku Kod = Inkey() Uart_txt = Uart_txt + Chr(kod) 'Zapisz w Uart_txt Bufor = Ischarwaiting() 'Sprawdź czy jest znak Loop Until Bufor = 0 'Zakoncz jeśli brak znaku Return Do wyłuskania danych polecam instrukcję Instr
Witam. Włącz przerwania, inaczej dane nie wpadną do bufora.
Witam, Jak można odebrać i wyświetlić na LCD taki ciąg znaków wysyłanych z PC przez RS232 "Wzmienna spacjazmienna" (PC->Atmega) "W128 021" gdzie W jest warunkiem odebrania znaków przez Atmegę i ciąg zwrotny (Atemga->PC) "C125 035"
Rozwiązanie jest proste :) Odbieraj 156 znaków. Po odebraniu znaku zwiększaj zmienną pomocniczą. Jeśli osągnie ona 156 to zakończ odbieranie. Użyj np. petli FOR..NEXT lub DO..LOOP UNTIL
Użyć przerwania. A dokładnie config serialin z funkcją Bytematch. Ewentualnie po każdym odebranym znaku zerowym Chr(0) dać Clear Serialin Wtedy bufor będzie zawsze ustawiony na początek.
Jeśli jest możliwość wykorzystania pinów uC dodałbym kontrole przepływu przez port sterując sygnały RTS/CTS portu COM co znacznie poprawi wysyłanie i odbieranie z portu bez potrzeby stosowania znaku na koncu wysyłanej ramki ;)
z ciągu (powiedzmy 5-cio znakowego) udało mi sie zczytać tylko 2 znaki. nie wiem dlaczego. A może poprostu program się nie wyrabia z odbieraniem znaków? Czy bascom buforuje odebrane znaki?
Funkcja "serialPort1_DataReceived " pobierze tylko 1 bajt. Zostanie on skonwerowany do postaci liczbowej - czyli do zakresu 0..255 i coś takiego wyświetlisz. Jeśli odebraną daną jest kawałek tekstu, to będzie to wartość liczbowa kodu ASCII odebranego znaku. Co w zasadzie chcesz odbierać? Tekst, czy liczby? Pojedyncze znaki ASCII można odebrać przez...
dim urx_bufor(5) as byte dim urx_licznik as byte dim urx_odebrano as bit ... urx_licznik=1 'to jest potrzebne dla bascom'a bo tablice zaczynaja sie od 1 a nie 0 enable interrupts ... przerwanie_urx: if urx_licznik<5 then urx_bufor(urx_licznik)=udr incr urx_licznik end if if udr=13 then set urx_odebrano 'odebano ENTER if udr='T'...
Mam jeszcze jedno małe pytanie. W BASCOM chcę odbierać ciąg znaków z portu RS232 i przypisać je do jakiś zmiennych. Jak mam to zrobić ppoprawnie bo robie tak i nie za bardzo mi to działa Wysyłam ciąg znaków w Delphi 7 jako PChar: #145#123#150#78 A w BASCOM odczytuje tak: A,B,C,D = są jako Byte do A = Input() if A=145 then B=WaitKey() C=Waitkey() D=Waitkey()...
Może gubisz przesyłane znaki bo gdzieś pętla jest za wolna. Jeśli taką komunikację wrzucisz do większego programu to problem się tylko pogłębi. Lepiej skonfiguruj bufor i Bascom będzie odbierał wszystkie znaki w przerwaniu. Nie przegapi żadnego znaku. ->Config Serialin0 Widać, że dodajesz Enter na końcu stringów. Możesz to monitorować i parsować dane...
najpierw zewrzyj sobie nóżki 11 i 12 i zobacz czy to co wpisujesz w terminalu wraca do niego - powinno być echo - czyli piszesz literkę np A i powinna ona polecieć do MAX232 i wrócić do terminala i się wyświetlić - jak to będzie dobrze to możesz być pewien, że ten tor masz OK , a jeśli nie będzie tak? to sprawdź kabel i połączenia - nie ma bata, musi...
Input nie zawiśnie jeśli ustawisz poprawnie "Config Input = Cr", bo standardowo Input "czeka" na CRLF. A odczytać musi, bo przejście do podprogramu nastąpi tylko w przypadku nadejścia znaku entera (13). Więc z góry wiadomo, że Input je odbierze. Bufor jest czyszczony przez ten Input właśnie. Sorry pomyłka - standardowo Input czeka tylko na CR więc jeśli...
Napisałeś: "Gorzej z współpracą z ciągiem otrzymywanym z terminala" U mnie nawet nie odbiera pojedyńczego znaku, a co dopiero ciąg znaków.
Po prostu nie możesz korzystać z instrukcji Input tylko z instrukcji np. Inkey i odbierać 128 bajtów o dowolnej zawartości (nawet bajtów zerowych) Po odebraniu 128 bajtów sprawdzić sumę kontrolną, tak jak pisał kolega mirekk36. Jeśli odebrałeś wysłasz ack spowrotem np. z sumą crc ramki Instrukcja Input się nie nadaje do tego celu. Tylko odbieranie za...
Teraz zgupiałem ... jak ją odczytać? Nie wystarczy wywołać jeszcze raz Gosub Odczytaj_uart W części programu -> Odczytaj_sprzetowy_uart Funkcje Do kończe jeśli Loop Until Bufor = 0 Or Kod = "13" czyli jeśli wystąpi znak CR lub brak znaku, to może być powodem?
tak, interface wyjściowy to UART TTL ale to w niczym nie przeszkadza i można go podłączyć bezpośrednio do portów uC. Aby Komputer skomunikował się z uC należy: po stronie kompa: -podłączyć moduł radiowy USB(po podłączeniu modułu powinien zamigotać diodkami) -skorzystać z terminala i otworzyć port COM z numerem dla jakiego zainstalował się moduł -prędkość...
Tak, kod jest potrzebny. Założenie jest takie że kod będzie modyfikowany. Urządzenie jest eksperymentalne więc trudno przewidzieć jakie ciagi znaków beda odbierane i wysyłane.
Pomijając tragiczny kod zastanawiam się po co wysyłasz milion znaków, przecież w jednej ramce rs możesz wsadzić 255 różnych znaków, na tak prostą rzecz nie potrzebujesz takich ramek.
$crystal = 16000000 $baud = 9600 Przy tej prędkości transmisji i tym kwarcu będziesz miał spory błąd. Jeżeli chcesz używać tej prędkości to zmień kwarc na 8MHz. Osobiście gdy potrzebuje transmisji RS232 to używam programu który odbiera i wysyła znaki w przerwaniu od UARTA.
A może odbieraj większy string i sprawdzaj pierwszy znak.
Składaj ciągi z odbieranych znaków. Jeśli trafi się przecinek to koniec danej partii. Potem tylko analiza: HELLO? END? Nie, więc liczba. Oczywiście przecinek trzeba pominąć.
Hmmm ni ewiem jak Ci to napisać bo nie wszystko da się zrozumieć od razu..ale pomysl.. nadajesz telefonem "Zapal" to jest raptem pięć znaków i tam NULL o którym nie koniecznie musisz wiedzieć ..ale... idąc dalej piczesz że "Tekst = Inkey()" procesor wciaga te kilka nadanych znaków..a załóżmy że teraz nadałeś "Zgaś" w pierwszej procedurze "If" sprawdził...
To jest proste jak świński ogon :D ahahahaha, ale napisz kawałek kodu. Czy masz tam jakiś LCD czy nie, czy masz tam jakiś Timer ustawiony do odmierzania sekundy czy Wait`ujesz :D Czy w dokumentacji czujnika pisze, że nadaje tez na końcu niewidoczne w terminalu znaki 13 lub 10? EDIT: aaa masz tu taki prosty. Napisałem przy śniadaniu więc błąd mógł się...
Troche czasu minęło odkąd robiłem coś na GPSach, ale czy $GPRMC nie jest czasem wysyłane jeżeli jakieś minimum jest osiągnięte (x satelitów widoczne itd.), lub GPS odpowiednio skonfigurowany? Spróbuj też podłączyć ten odbiornik bezpośrednio pod kompa (może być wymagany konwerter RS232) i zobacz czy odbierany strumień jest taki sam jak ten na uC.
Poczytałem trochę mam kilka wniosków a mianowicie problemem nie jest warstwa fizyczna RS485 a warstwa protokołu. A także zdecydowanie powinienem zając się instrukcją Printbin a nie Print i muszę wysyłać dane typu byte a nie jak ja mam tu wyżej za pomocą znaków ASCII czy mam racje czy się mylę oświećcie mnie.
Jest różnica bo używasz InputBin w przerwaniu. Ono odbiera 4 bajty ale skoro są włączone przerwania to flaga od odebranego znaku jest ustawiana. Ręcznie skasować flagę to można chyba tylko bezpośrednim wpisem do rejestru. Tutaj BASCOM nie pomoże. Musowo zajrzeć do datasheeta.
W takim razie jak inaczej wykryć koniec ramki skoro na końcu zawsze jest co innego? A procedurę zapisu na kartę jak mam szybciej wykonać? Nadajnik wysyła ramki co sekundę i nie mam na to wpływu. A jak wykryć koniec ramki po znaku CR? Zrobiłem jak piszesz i dałem oczekiwanie na znak "$". Jest trochę lepiej ale i tak są błędne ramki.
Witam, mam dosyć upierdliwy problem z transmisją UART z użyciem modułów radiowych HM-R/T868. Problem polega na tym, że jeśli nadajnik nic nie nadaje, to odbiornik odbiera dziwne "śmieci" z eteru. Problem znika w momencie, kiedy będący w zasięgu nadajnik nadaje cokolwiek. Więc w głównej pętli programu umieściłem komendę: [syntax=basic4gl]Print chr(0);[/syntax]...
Komunikuje sie z poziomu terminala lub własnej aplikacji na PC z własnej konstrukcji sterowniczkiem załączającym przekaźniki na Atmedze 126. Jeśli wpisze do Ubrr i Ucsrc wartości ustawiające np 9600 bitów na sekundę to transmisja po rs232 działa, ale jeśli wprowadzę np. dla 2400 i innych czy nawet zmienię data bits 8 na nap 7 przy 9600 bitów na sekundę...
Sproboj zrobic tak, żeby procesor po odebraniu danych czekał na określony znak (przyslany z komputera przez RS), po jego odebraniu niech natychmiast odsyla dane, w prog. na PC trzeba oczywiscie odbierać dane zaraz po wyslanie tego znaku inicjującego odbiór... Upewnij się też, czy nie masz zapełnonenego bufora nadawczego w uC.
No i problem wygląda na rozwiazany, to co powodowało niedziałanie ww układu to fakt, ze w przerwaniu od UART nie pobierałem znaku z buforu, przez co flaga nie zostawała wyzerowana i kolejne znaki nie były odbierane... Innymi słowy powinno być tak: Port: A=InKey() Toggle portd.6 Return
Nie wiem czy będziesz mógł ustawić Timeout bo jest od wersji 2076. Najwyżej zakomentuj. Reszta powinna działać. Poczytaj o "Config Serialin" i "Ischarwaiting" Tak dokładniej to Input czeka na Enter albo na to co ustawimy żeby czekał (Config Input) Jak Enter nie nadchodzi z powodu jakiegoś błędu to przydaje się Timeout. Najczesciej odbieram dane po jednym...
[syntax=basic4gl]If Znak = 49 Then '49='1'[/syntax] Wyjaśnienie. Znaki, czyli cyfry, litery, inne znaki i znaki nie drukowane mają swoje kody ASCII. Cyfrze 1 odpowiada liczba 49 (dziesiętnie), a literze A liczba 65. Spokojnie używając jednego znaku obsłużysz jeszcze wiele poleceń. Znajdź sobie tablicę kodów ASCII.
Z przerwaniem masz racje, że najlepiej, aby przerwanie trwało jak najkrócej. Mam jeszcze pytanie bop na koniec transmisji wysyłam ciąg danych z PC jak narazie 3 znaki. Funkcja Waitkey z tego co czytałem zwraca przychodzący znak czy może ona zwrócić ciąg znaków jeżeli przypiszę ją do Bufora typu string*5? Probowałem odbierać osobnymi waitkey te 3 bajty...
Witam. Program sklecony jest z porad znalezionych na forum. Bardziej spodziewałem się zobaczyć "Print "a: " ; A ; " ,b: " ; B ; " c: " ; C ; " Przeglądałem wiele postów w wielu miejscach, helpa nie znalazłem odpowiedzi więc pytam ( może źle szukałem). Więc proszę o poradę. Chce odebrać ramkę do 8 znaków i wpisać do a,b,c,d,e,f,g,h. nouki
Generalnie mam ten sam problem. Modem reaguje poprawnie na wysyłane komendy ale nie odbiera potwierdzeń z modemu. Zuważyłem, że gdy zastosuję następującą procedurę uruchamiania to działa poprawnie: 1 zasilanie mikrokontrolera 2 odłączenie TxD modemu do kontrolera 3 zasilanie modemu (PWRKey do GND) 4 połączenie ponownie TxD modemu do kontrolera Dodano...
Problem rozwiązany zmieniłem funkcje odbierania znaku na taką [syntax=c]//Odbieranie unsigned char uart_odbieranie( void ) { /* Czekaj na dane do odbioru */ if( ( !(UCSRA & (1<<RXC)) )==0)return UDR; /* Pobierz i zwróc dane pobranie z buforu */ }[/syntax]
(at)Mat_91 Nie ma potrzeby wysyłać kontrolną paczkę danych na początku ramki komunikacyjnej, chyba, że ramka będzie miała różną długość - wtedy to jak najbardziej, pierwszy bajt np. z informacją o ilości wysyłanych znaków, bajty danych i CRC. Ze stałą ilością bajtów jest łatwiej. Odczekujesz, aż uzbierasz określoną liczbę bajtów po czym porównujesz...
Witam Odbieram po rs232 ramki , najdłuższa z nich ma 176 znaków a najkrótsza 44 znaki , kawałek kodu w bascomie wygląda tak : Dim Znaki As String * 176 Enable Interrupts Enable Urxc Do If Ischarwaiting() = 1 Then Inputbin Znaki . . 'tu wyświetlam na lcd . Loop Problem polega na tym że jak przyjdzie krótsza ramka to program stoi w miejscu , rusza...
Trochę trudno zrozumieć ten kod bo pewnie robi coś innego niż zamierzasz. Kiedy włączysz odbieranie znaków do bufora to odbierane są "w tle" w "ukrytej" obsłudze przerwania. Teraz o tym że w buforze czekają znaki możesz się dowiedzieć albo testując funkcją Ischarwaiting() albo ustawiając trigger na jakiś konkretny znak własnie poprzez Bytematch Kiedy...
W Bascom'ie masz instrukcję VAL. Najpierw deklarujesz zmienne B [byte/word] i S [string*x; x=liczba znaków] a następnie konwertujesz B=val(S) i dalej używasz zmiennej B. W odbieranym stringu muszą być tylko znaki z zakresu 0..9 bez literek ;-) inaczej "krzaki".
Witam, Piszę program w DELPHI obsługujący pomiar dwóch czujników DS18B20. Mikro kontroler to ATMEGA32, program w BASCOM. Wszystko ogólnie już działa: wysyłam po UART ciąg znaków jako string i odbieram wybrane przeze mnie znaki o danej ilości funkcją Copy w DELPHI. Korzystam z biblioteki TComPort. Jedyny problem to z Label'i zrobił mi się generator:...
Witam, Problem pojawił sie gdy zmuszony zostałem do zmiany procka z AT90S2313 na ATtiny2313. Ogólnie wszystko sie wydaje wporządku BASCOM wykrywa procka i go programuje. Nie działa jednak jak powinno odbieranie z procka znaków ASCII. Na starym procku uzywałem następujących parametrów transmisji BAUD9600 8 N 1. Przy takich ustawieniach RS-a otrzymuje...
Probowalem. A jak odbierać znak w takim razie?
skąd moge wiedzieć czy 0 to nie jest bajt jaki potrzebuje odebrać. Idealnie by było jak timeout zmieniał by jakąś zmienną "wewnątrz bascomową" którą można odczytać, następnie zresetować 1.Poczytaj o Ischarwaiting. 2. Zobacz czy przypadkiem zmienna ERR nie załatwi sprawy. Sam nie jestem pewien, bo jako takiego opisu jakie funkcje ją generują to nie...
Komenda Input czeka na znak entera. Jeśli chcesz odbierać pojedyńcze znaki zastosuj Inkey lub Waitkey. Po resztę informacji odsyłam do Helpa Bascoma
Użyj gotowej funkcji Input, która odbiera całą linię do znaku CR (lub CRLF - do ustawienia w Config Input) do jednej zmiennej. Kolejna linia może być odebrana do kolejnej zmiennej itd. Możesz też np zliczać ilość CR i wystawiać tyle zmiennych co znaków końca linii.
Witam, potrzebuje pomocy z obsługą strzałek kursora w Bascom'ie '51. Kod strzałek składa się z 3 znaków ASCII, przykładowo strzałka w górę to kod klawisza "ESC", "[" i "A". Próbowałem skorzystać z komendy Inkey(), ale ona odbiera tylko pierwszy znak z bufora, czyli w moim przypadku kod klawisza "ESC". Doraźnym rozwiązaniem okazała się komenda Waitkey()...
...Dlatego zastanawiam się dlaczego aplikacja nie odbiera danej wysłanej z urządznia, i ewentualnie co się dzieje po drodze. Bascomowa Print , zamienia wartość binarną zmiennej , na ciąg znaków w kodzie ASCII , reprezentujących tę liczbę. Np. Bascom -> zmienna=1002 -> Print zmienna po RS-sie "leci" kolejno 49,48,48,50,10,13 Jeśli korzystasz z jakiegoś...
Jak zrobić coś takiego ?? Mam procek AT90S2313 Do niego dołączony COM poprzez MAX232 i 8x LED do portu B. Z coma odbieram dane konkretnie text wysyłany przez program LCDsmartie. Chcę teraz napisać soft który odbierze np 20 znaków i przetransformuje je na odpowiednie ciągi danych przeznaczone do wysłania na port B programik ma sterać wyświetlaczem widmowym...
Witam. Jak już pisałem , nie odbieram znaków na procesorze jedyne co ten program robi to ma wysłać 'z' z procesora do komputera co sekundę . Także serialin raczej nie ma nic wspólnego z tym , wiem że jest to źle napisane tylko już nie chciało mi się tego usuwać. Z tego co wyczytałem w instrukcji bascoma to do wysyłania znaków przez uart wykorzystuje...
Wstęp: Przedstawiam taki skromny raczej projekt, ale dla mnie o sporym znaczeniu. Celem projekty było umożliwienie uC z rodziny avr, pracy w sieci Lan a w zasadzie zbudowanie takiego oprogramowania dla uC, które przypomina działaniem serwer http. Aby było to możliwe, sam avr-ek nie wystarczy. Trzeba go uzbroić w jakiś moduł sieciowy. Zazwyczaj opieram...
Hm, rzeczywiście obsługę "dekodowania" zawartości odebranego stringu można przenieść poza przerwanie. Choć - to akurat rzeczywiście działa :) Ale - to raczej nie zmieni problemu z "ginącą" częścią odebranego stringu, bo przecież zawartość bufora się nie zmienia od momentu "poskładania" go w serial1charmatch. Kiedy następuje wywołanie serialcharmatch...
Właśnie sprawdziłem poprawny zapis użycia funkcji LOAD i nie ma tam znaku "=" tylko "," W każdym razie dzięki za info... bo mi coś ta funkcja nie działała do końca (chyba). A co do CKOPT to nie znalazłem tego :( Na screenie, którego załączyłem są wszystkie fusebity do ustawienia.. nie widze tam CKOPT-a (BASCOM 1.11.9.0) widze na screenach, że kolesie...
Obsługa UART jest przerywana TIMEREM i dlatego gubi znaki. Zrób odbiór UARTU na przerwaniach, odbieraj w nim tylko pojedynczy znak i ładuj go do bufora (nie czekaj w tej funcji,aż odbierzesz wszystkie znaki), a po odebraniu końcowego znaku ustawiasz flagę, że skończył. I w pętli głównej dekodujesz sobie na spokojnie tą ramkę. Popróbuj może jeszcze ze...
Witam Ogólnie wiem jak działa tylko interesuje mnie dokładnie: np. zmienna=25 PRINT zmienna Co otrzymam po stronie odbiorczej? Czy są jakieś znaki stopu lub coś podobnego? Wiem że zamiast spodziewanych 2 znaków odbieram 3, tylko nie wiem jaki jest ten trzeci. On psuje mi cały program, bo ten trzeci znak nie jest liczbą i nie wiem czy jest na początku...
Witam forumowiczów ... Piszę dość zaawansowany program na Atmege64, większość rzeczy wykonywane jest w przerwaniach programowych i jest wszystko OK. Komunikację zrobiłem na RS485 i działa dobrze (protokół MODBUS RTU) ale mam problem z wysłaniem danych: - jak wiadomo RS485 - więc na czas wysyłania muszę uruchomić nadajnik - wysyłam dane - po ostatnim...
BASCOM i wątki - czarno to widzę. To co chcesz zrobić nie wymaga stosowania wątkó, tylko dobrze zorganizowanej pętli. Pętla mogłą by wyglądać tak: Odczyt temperatury z ADC. Ustawienie przekaźnika w zależności od temperatury. Wysłanie temperatury przez RS-232. Można by też gdzieś do tej pętli wrzucić odczyt danych z RS-232, na przykłąd w celu modyfikacji...
Witam mam taki problem potrzebuję wysyłać przez port com danie w taki sposób, aby były one traktowane jako znaki ASCII bo tylko takie mogę poprawnie odebrać mikroprocesorem. Z tego co zauważyłem jedynym działającym w przerwaniu od UARTa poleceniem odbioru, w bascom AVR jest inkey a to odbiera tylko znaki ASCII :/ No i tu pojawia się problem bo o ile...
UART nie ma tutaj nic do rzeczy bo rozdzielić trzeba dane które już są w pamięci. Chodzi o BASCOMa w którym się ciężko pisze. I o niezrozumiały opis. A do tego nie bardzo rozumiem o jakie zera Ci chodzi. Bo z tego co napisałeś to wynika że Ty zamiast 32 to odbierasz 64 znaki. I do tego jakieś zera (których nie ma) Ci obcina. Może BASCOM to konwertuje...
Witam serdecznie! Chciałbym poprosić kolegów o rozwiązanie pewnej kwestii. Ischarwaiting() zwraca wartość 1 gdy w buforze coś jest a 0 jak nie ma. Dana wejściowa (Znak) z RS232 na postać 5 znaków + enter czyli 6 znaków. Config Serialin=Buffered, Size=6. Zmienna Znak jest wartości String*6. Dane z RS-a odbierane są w pętli: Dodano po 3 powstał mały byk...
No to tak: Program w sumie działa znaczki faktycznie są do góry nogami ale to nie problem. Nie do końca poprawnie tłumaczy wszystkie literki i nadal nie działają znaczki $ (at) [ ] \ i pozostałe z przedziału 91 do 96 w tablicy ASCII. Nadal następuje reset procesora po wpisaniu ABCDEFGHIJKLMN. Obrazy znaków przepisuję do ramu bo tak mi wygodniej tryb...
Twój program ma różne pętle Do...Loop_Until w których czeka na określone znaki. Jak one nie przyjdą to program utknie w tych pętlach. Najprościej się przed tym zabezpieczyć, i jednocześnie uprościć program, robiąc tak żeby odebranie entera resetowało odbieranie ramki. I dopiero po odebraniu tego entera to co się odebrało do bufora uznawać za ramkę....
Najłatwiejszy "słownik" komend Bascoma jest tutaj -> https://wiki.mcselec.com/bavr/BASCOM-AVR... -> bo widać je wszystkie na raz alfabetycznie i szybko można kliknąć. Tłumaczyć można oczywiście całe bloki teksu, albo w GoogleTranslator, albo DeepL Ja korzystam z wbudowanej pomocy czyli wciskam w Bascom F1 i szukam sobie w Index. Dla mnie działa szybciej...
Nareszcie ktoś odpowiedział:) No w czymś jest problem, chce zrobić tablice na wzór tej w BASCOM Dim _Dana(1000) as eram Word tylko teraz to ma być w 24Cxx. Problem w tym, że podczas zapisu zwykych danych odbieranych z UART trzeba zapisać jeszcze adresy gdzie te dane zostały umieszczone. Do tej pory zapisywałem w wewnętrznym EEPROMie M32 (wszystko szło...
Witam. Miałem dwie atmegi spięte przez port szeregowy. Full duplex. Master, wysyłał do slave znak "Q" a w odpowiedzi otrzymywał stan wszystkich ośmiu bitów wybranego portu. Master odebrany komunikat wysyłał na port i zapalał LEDy. Ukłąd prosty. Wszystko działało przepięknie. Odbieranie znaków w układach master i slave realizowałem przerwaniem od URXC...
No, więc skoro to SPI to przez BASCOM powinno pójść łatwo. config spi = hard, clockrate=64, master=yes, polarity=high 'ustawiam spi spiout &B00000001, 1 'wybieram liczbę znaków i segmentów spiout &B01000000, 1 'ustawiam wyświetlacz w tryb odbierania danych spiout &B10001111, 1 'włączam wyświetlacz i ustawiam do końca nie wiem co(na default)...
przerwanie od portu szeregowego obsługujesz w ten sam sposób jaki i każde inne przerwanie. Ale to nie wszystko ;) Jeśli skonfigurujesz seriala do pracy z buforem , to Bascom sam "podłoży" przerwanie i będzie za Ciebie odbierał znaki z uarta i zapisywał do bufora kołowego.Instrukcję obsługi Bascoma trzeba czytać , czytać , czytać... , a nie tylko pytać...
Dokładnie to potrzeba mi przesłać 5 zmiennych, które będą przyjmowały tylko 2 stany - albo 1 albo 0. 2313 ma tylko wysyłać, nie musi nic odbierać z ATm8. Czy mógłbyś sprecyzować co znaczy: Jeżeli to są zmienne binarne to przesyłaj je w jednym bajcie (tak możesz do 8 zmiennych) . Czy chodzi o to że wysyłam np zmienną X=10100101 a ATm8 dopasowuje ten...
Zmieniłem na 6 znaków Ale czy tworząc ciąg z odebranych zmiennych ma być tak [syntax=basic4gl] ' $ T E M P Ciag = Chr(d1) + Chr(d2) + Chr(d3) + Chr(d4) + Chr(d5) [/syntax] czy tak [syntax=basic4gl] ' $ T E M P Ciag = Chr(d1) + Chr(d2) + Chr(d3) + Chr(d4) + Chr(d5) + Chr(0) [/syntax] Chyba jednak zrezygnuję z tego dodatkowego warunku [syntax=basic4gl]...
If Ucsra.4 = 0 Then ZbeeGin , dzięki za podpowiedź. Jeszcze mam jedno pytanie. W UART przy odebraniu 1-szego znaku jest generowane przerwanie Urxc. Mam coś takiego (okrojone dla idei): On Urxc Odbierz ... Odbierz: Inputbin Adr1 , Adr2 , Adr3 , Adr4 , Adr5 , Adr6 , Adr7 Return Czyli wychodzi na to, że Inputbin odbiera przychodzące bity, co powoduje...
Ze specyfikacji wynika że w odpowiedzi nie dostajesz na końcu znaku CR. Wg. specyfikacji ASCII CR to szesnastkowa wartość 0x0D. Aby sprawdzić do dostajesz w odpowiedzi to po wysłaniu kodu zrób pętlę, która odbierze ileśtam znaków i wyświetli każdy w następnym polu wyświetlacza. Lepiej jednak napisać procedurę podpiętą pod przerwanie , która zrobi to...
Zdeklarowałeś uart jako programowy przez OPEN COMc.0 co oznacza że programowo MUSISZ czekać aż coś przyjdzie. Nie ma tak że program sie wykonuje i nagle odbierzesz sobie znak. Bo program MUSI czekac na poczatek znaku aby go odebrać. Ja ci dałem przykład ze sprzętowym uart. Czyli program się wykonuje, a procesor sam bez wiedzy programu odbierze znak,...
Witam ponownie. Udało mi się nawiązać kontakt z urządzeniem za pomocą uC. Teraz mam inny problem, który nie umiem obejść. Otóż odbieram ze skanera ciąg znaków i wyświetlam go bezpośrednio na LCD: STS, 1.Sluzby , ,BX 148.XXXX, ,111111111000000,11111111110001000,,1,0,... [len=114] Ale chciałbym z tego wyodrębnić jakoś 2 zmienne: to: 1.Sluzby i...
A nie lepiej zastosować jakieś rozkazy po SPI? Np. 01bbxx - zapisz bajt 'bb' w tablicy na pozycji 'xx' 02xx - odeślij bajt z tablicy z pozycji 'xx' 03xx - zapisz wartość z tablicy z pozycji 'xx' w EEPROM 04 - zapisz całą tablicę w EEPROM Wymyślenie jakiegoś prostego protokołu transmisji usprawni komunikację i zwiększy jej możliwości. Bo zakładam że...
...Tylko czemu w manualu bascoma, w książce o bascomie jest napisane o możliwości obsłużenia ischarwaiting przez uart programowy... Nie wiem co piszą w książce , ale w manualu Bascoma pisze wyraźnie , że Ischarwaiting() działa WYŁĄCZNIE na sprzętowych UART-ach. Jest mi to jednak wciąż bardzo potrzebne... Co do rozwiązania z przerwaniami INTx to gdyby...
ASC() help od takich rzeczy jest Próbowałem ale ja wysyłam z KOMPUTERA PC z terminala np. 0+Enter 75+Enter 255+Enter i chcę by CPU to odebrał i odbiera ale teraz chcę by te znaki zinterpretował jak "zmienną" o tej wartości 0 75 255 i wypisał np na PORT i tego nie wiem jak zrobić ? Autorze tematu, chyba nie bardzo rozumiesz kod, który stworzyłeś, hm......
a jak masz ustawioną prędkość w Bascomie dla UART? jak masz ustawione taktowanie procka? Na jaką prędkość i jakie parametry połączenia skonfigurowałeś w terminalu w PC? Jak wreszcie to połączyłeś ? może jakiś kawałek schematu? próbowałeś wyjąć procka i zewrzeć z tej strony Tx z Rx aby zobaczyć czy w terminalu masz powrót echa czyli tego co wpisujesz...
Ja robie to w ten sposób: Ustawiam buforowanie: Config Serialin = Buffered , Size = 150' ilość odbieranych znaków Enable Interrupts' trzeba zezwolić na przerwania W pętli głównej daje warunek: B = Ischarwaiting() If B = 1 Then Gosub Odbierzuart A dalej procedura odczytu: Odbierzuart: C = "" Do A = Inkey() C = C + Chr(a)...
Proponuję zrobić taki eksperyment: Kod: Print "a" Print Chr(97) Print Chr(&H61) Print Chr(&B1100001) to zawsze zostanie wysłany kod ASCI - 97... Acha, czyli jak w procesorze, którym odbieram dane zrobię tak: zmienna_byte = inkey() to w zmiennej będę miał kod ASCII odpowiadający danemu znakowi. Natomiast jak zrobię tak: zmienna_typu_string =...
Witam kolegów I koleżanki Mam pewne urządzenie które komunikuje się po UART 3.3 V. Aby rozpocząć komunikację muszę do urządzenia wysłać następujące komenty Enter xon (ASCII) Enter Po tym urządzenie przesyła dane o które mi chodzi I które bez problem odbieram. Do komunikacji z urządzeniem używam Mega328P I Bascom-a. Problem w tym że gdy wysyłam powyższe...
pewnie piszesz w bascom ,wiec masz kod odbierania danych (całych stringów ) w przerwaniu :) : Config Serialin = Buffered , Size = 20 do If Ischarwaiting() = 1 Then '1 - odebrano znak,0 - pusty bufor Call Read_rs232 End If loop Sub Read_rs232 Dim Bufor As String * 24 Input Bufor Noecho end sub
Zacząłem się zastanawiać nad problemem pożerania czasu przez mikrokontroler na wykonanie poszczególnych instrukcji, takich jak print, ponieważ wyliczone teoretycznie osiągi przepływnośi bitowej, są nieprzyzwoicie wyższe, niż te, które udaje się osiągnąć w praktyce ( tymat -> http://www.elektroda.pl/rtvforum/viewtop... ). Urządzenie przez...
a która komenda mówi o tym żeby rozpoczął drukowanie?? (z dosem nie będę się bawił, bo elektronicznie jest wszystko OK - trzeba poodciągać nóżki przez rezystory do masy i jest OK jak nie "wiszą między 0/1" Działa, bo drukarka odbiera komunikaty typu 7 (piszczek) Jakby mi ktoś podał komunikat drukujący to co jest w pamięci to byłbym dozgonnie wdzięczny,...
Mógłbyś trochę rozwinąć ? Niestety nie mogę tego ogarnąć - to już moje drugie podejście, po próbie połączenia UART z PWM, wtedy odpuściłem, bo blokowało mi wyjścia na czas połączenia. Przeglądając przykłady na tym forum wyszło coś takiego: '********************* Konfiguracja UART Config Serialin = Buffered , Size = 40 , Bytematch = All Enable Interrupts...
http://obrazki.elektroda.pl/1713774600_1... Witam, Postanowiłem zaprezentować jeszcze jedno narzędzie, które często wykorzystuję w swoich projektach z mikrokontrolerami jeśli potrzebuję synchronizować czas w uC tak żeby zegarek chodził bardzo bardzo dokładnie ;) Zamiast bawić się w SUPER KWARC'e, zamiast bawić się w super dostrajanie czy...
Telefon cokolwiek wysyła bo jak podłączyłem wyjście z SIEMENS do portu D.7 to na wyświetlaczu pokazały sie 3 znaki wysłane przez telefon Tak samo jak dzwonie na niego to również coś wysyła - jakiś pakiet znaków. Może mam źle ustawione coś z komunikacja RS232 lub może trzeba do telefon wysłać jakąś komendę jeszcze. Jak wgram ten poprzedni programik od...
Cześć Zumek ! Faktycznie pogrzebałem troszeczkę w BASCOMIE i softowy UART zadziałał bez problemu. Jednak.........mam pewne spostrzeżenia: 1) Pomiędzy instrukcjami otwierającymi porty a pierwszą instrukcją wysyłającą dane musiałem zrobić wstrzymanie programu. OPEN "coma.7:19200,8,n,1" for output as #1 OPEN "comd.2:19200,8,n,1" for input as #1 WAIT 1...
Sorry zmyliłeś mnie tym koden na 1820(18s20). DS18B20 w pierwszych dwu bajtach temperatura zapisana jest na 12bitah (11 + bit znaku), a w 1820 na dziewięciu (8+1 znaku). 50h i 05h to 0550h (0000 0101 0101 0000binarnie) jeżeli przesuniesz 4 bity w prawo otrzymasz 0000 0000 0101 0101 czyli 0055h czyli 85stC (gotowe stopnie). A w mlodszym niblu mlodszego...
Witam. Mam problem z wyświetlaniem danych odebranych z przez UART na ATmega8. Dane które są wysyłane wyglądają tak: ASCII .32001152DFAE. Kropki oznaczają początek i koniec tekstu W terminalu dane odbierane są poprawnie. Problem jest w napisanym programie. Chce wyświetlać 12 z 14 znaków przesyłanych poprzez UART, nie interesuje mnie pierwszy i ostatni...
Zastosuj dwa bufory. Jeden do odbierania danych w przerwaniu, a drugi do pobierania znaków do wyświetlenia na LCD. Teraz po odebraniu jednego ciągu LCD zaczyna wyświetlać co trwa z 50ms. Jeżeli podczas wyświetlania zacznie przychodzić nowy text to zacznie on nadpisywać bufor i na LCD będziesz miał krzaki. Więc zastosuj dwa bufory. Odbieraj do jednego....
Bardzo dziękuję! teraz jest ok Może Ty będziesz wiedział bo nadal mam problem z odebraniem czegokolwiek z kompa na mojej Atmedze i LCD Atmega8 16 MHz LCD 2*16 MAX485 (ST485CN) podłączony do konwertera 232/485 a konwerter do kompa przez USB (zainstalowany usb-to-serial bridge) To co Atmega wysyla odbieram bez problemu natomist nie wiem jak odebrac to...
- sieć programowo wygląda najprościej z możliwych (przynajmniej narazie) 6 znakowy literowo cyfrowy adres konkretnych slav-ów, wszystkie w stanie spoczynku nastawione rzecz jasna na odbieranie znaku, jeden master. - procesor taktowany wewnętrznym oscylatorem 9,6MHz o ile dobrze pamiętam, szybkość transmisji 9600 na poczatek w ramach prób ostatecznie...
Podsyłam prosty programik z polskiego helpa do bascom-avr. Bardzo dobrze obrazuje zasade wysylania i odbierania sygnalu szeregowego. Wiem, że niby temat jest zamknięty, ale może kolega jeszcze tutaj zerknie, a jak nie, to będzie dla innych :) '---------------------------------------... ' RS232BUFFER.BAS ' (c) 2000-2002, MCS...
Zawsze odbierasz przez UART dane binarne. Możesz je tylko sobie wyświetlić lub wypisać jako znaki, liczby dziesiętne lub szesnastkowe. Odbierasz bajty, masz z nich złożyć daną 16-bitową, np. tak: wartosc = bajt_mniej_znaczący + bajt_bardziej znaczący * 256
Zgłaszam problem, ponieważ mimo przeszukania forum nie znalazłem odpowiedzi. Chodzi o to, że wysyłam z mikroprocesora ATMega48 jakiś dowolny znak. Jednak w terminalu zamiast tego czego oczekuje (cały czas tej samej wartości) pojawia się ciąg znaków 00 C0 C0 00 C0 C0 00 C0 C0 itd. Nawet jeśli wpiszę inny znak do wysłania to cały czas odbieram ten sam...
1. dokumentacja: http://www.atmel.com/dyn/resources/prod_... strona 11. Nie czytałeś tego dokumentu? Od tego MUSISZ zacząć jak bierzesz nową i nieznaną kość do ręki. Nie musisz czytać wszystkiego od A do Z, ale wypada choćby przekartkować, żeby odnaleźć te informacje... 2. kod mógłbym napisać, ale jakoś nie mam na to czasu ani motywacji....
To wcale nie jest takie proste jak tu koledzy piszą. 2-3 tyg temu rozgryzałem to zagadnienie mając do dyspozycji 3 piloty. Wcześniej się tym nigdy nie zajmowałem bo nie było mi to do szczęścia potrzebne. Miałem na tapecie 3 piloty z czego 2 niby RC5 a jeden zupełnie nie znany. Te niby RC5 oprogramowałem używając czyjegoś gotowca, oczywiście nie działały....
bascom odbiór znaku odbieranie ramki bascom scanf znaku
fatek winproladder różnice attiny atmega amplituner instrukcja
kamera cofania alternator rozładowuje akumulator
Szum w słuchawkach podłączonych do tylnego panelu audio Mercedes CLC 220 2008 - Usterka skrzyni biegów