...Jakie jest zatem rozwiązanie tego problemu (jeśli jest)? Bascomowy UART programowy działa jedynie wtedy , kiedy wywołamy funkcję z nim współpracującą. W pozostałych przypadkach ( kiedy działają funkcje/procedury nie związane z programowym UART-em ) , nadchodzące dane są "niewidoczne" dla procka :( Np. jeśli masz w kodzie Wait 1 , a w czasie działania...
Przepraszam za całe zamieszanie, czemu? - odwrotnie wlutowałem diodę :) Oczywiście sama procedura jest jak najbardziej poprawna Dziękuje za zainteresowanie
Odbieraj znaki w przerwaniu, a obsługę rób w pętli głównej, lub wyłączaj przerwanie po odebraniu pierwszego znaku, a potem załączaj. Możesz też sprawdzać czy nie pojawia się Twoje "jedynie pewne znaki" I po ich odebraniu "odciąć" ciąg. Masz jeszcze Ischarwaiting do zabawy.
Skorzystaj z Inkey() i IsCharWaiting().
Taj jak napisałem wyżej. WAITKEY będzie czekało do czasu, aż coś odbierze. Jeśli w tym czasie wystąpi jakieś przerwanie to się ono wykona i wróci do programu wykonywanego wcześniej, czyli do WAITKEY (chyba, że WAITKEY będzie w jakimś podprogramie przerwania - wtedy kolejne przerwanie się nie wykona (wykona się po skończeniu aktualnego), chyba że na...
A po co wogóle kol. Stepel pisze sobie bufor we własnym zakresie, skoro jest coś takiego jak CONFIG SERIALIN, działający na przerwaniach. Potem trzeba tylko umiejętnie wykorzystać INKEY() i ISCHARWAITING().
Co do 1-szego pytania, miałem na myśli przerwania w ukontrolerze, timer0. Prędkości transmisji są na pewno dobre. A jak odczytać to przerwanie z UARTa? ischarwaiting()?
1) Brak deklaracji CONFIG COM w obu programach 2) W odbiorniku wyrzuć TOGGLE i wstaw RESET bo za chwilę napiszesz czemu led się ciągle świeci ale przyciemniony 3) W odbiorniku wykorzystaj ISCHARWAITING i INKEY. Odbierasz tylko A i na podstawie czy jest =10 czy =15 wykonujesz ifa do świecenia ledem
Zastosuj bufor: Config Serialin = Buffered , Size = 100 enable interrupts A oczekiwanie na znak zrób: Bufor_flaga = Ischarwaiting() : If Bufor_flaga = 1 Then Gosub Odbierz_uart Następnie procedura odbioru danych: Odbierz_uart: Bufor = "" Do Bufor_znak = Inkey() Bufor = Bufor + Chr(bufor_znak) Bufor_flaga = Ischarwaiting()...
USART pracuje asynchronicznie. Spróbuję po zmianie prędkości i na początku po inicjalizacji sprzętu (bo też się zdarza) czyścić bufor i ewentualnie podciągnąć RX rezystorem do Vcc choć wydaje się, że nie powinno to nic zmienić. Wydaje się także, iż jedno zbocze nie może tego dokonać chyba, że jest to "śmietnik" zboczy przy przełączaniu multipleksera...
Wszystko powinno wyjaśnić to: Jeśli w buforze nie ma żadnego znaku funkcja zwraca zero. Można najpierw sprawdzić czy w buforze transmisji znajduje się jakikolwiek znak. W tym celu należy skorzystać z funkcji ISCHARWAITING() . Nie sprawdzasz wogóle czy znak jest w buforze, zatem dostajesz głupoty.
Jest też taka fajna procedurka Ischarwaiting która wskazuje na to że w buforze jest znak odebrany. Jeśli Ischarwaiting =1 to tylko wtedy czytasz znak.
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
To nie jest dobry sposób na odczyt bufora. [syntax=basic4gl] '------------------------Odczyt UART w przerwaniu------------------------------... Serial0charmatch: Enter = 1 If Ignoracja = 0 Then Input Todczyt Noecho End [/syntax] Zawsze miałem kłopoty ze skompletowaniem linii oraz pojawiało się dużo przekłamań jak używałem Input. Lepszym sposobem jest...
Witam, jak wiadomo (przynajmniej mi narazie) z helpa Bascoma - zwykłe polecenie PRINT generuje na końcu dwa dodatkowe znaki CR i LF Niekoniecznie :D Za pomocą polecenia PRINT , można wysłać stringa zakończonego ... praktycznie dowolnym znakiem - również sterującym. Print "Zmienna" ; Chr(13) ; ' średnik zakazuje wysyłania znaków sterujących. ... druga...
Witam, chce uruchomić transmisje szeregową na podanym w tytule uC i tutaj napotkalem na problem, poniewaz dokumentacja do 48 jest bardzo uboga :/ Zaimplementowalem cos, ale nie dziala. jaka uboga? o czym ty mówisz ? skąd ty takie ubogie dokumentacje bierzesz? wejdź na stronę www.atmel.com i pobierz z tamtąd pełną notę PDF do jakiego zechcesz tylko...
To możesz zrobić tak: [syntax=basic4gl] Odczytaj_sprzetowy_uart: Dane = "" Do 'Odbierz znak po znaku Kod = Inkey() Dane = Dane + Chr(kod) 'Zapisz w Dane If Dane = "Obroty1" Then Obroty = 1 If Dane = "Obroty2" Then Obroty = 2 If Dane = "Obroty3" Then Obroty = 3 Bufor = Ischarwaiting() 'Zakoncz jeśli brak znaku Loop Until Bufor = 0 Return [/syntax] i...
Dobrze, że chcesz to przesyłać w trybie tekstowym. Zatem od strony mikrokontrolera poczytaj sobie w Bascomie o poleceniach: Config Seriallin INPUT Config INPUT Ischarwaiting a także do operacji na łańcuchach znaków: MID LEFT RIGHT itp to powinno cię naprowadzić.
Nic nie dostaję. Chce tylko wiedzieć jak odbierać dane jeśli nastapi przerwanie np dane typu string . Pisze jeszcze w bascom i tam jest funkcja ISCHARWAITING umożliwiająca kontrole bufora wejściowego gdzie dalej mogę sobie obrabiać itd..Wiec tu nie musze sie martwic czy jest jakiś znak w buforze i od tej strony dla mnie jest wszystko jasne Rozumiem,...
Pozbądź się RS'owej transmisji buforowej i innych komend typu Ischarwaiting(), Inkey() na rzecz przerwania od URXCx i wtedy sprawdź działanie programu.
Oproznij_bufor: Do Kod = Inkey() Bufor = Ischarwaiting() Loop Until Bufor = 0 Return
:arrow: Mictronic: Predkosc transmisji to 9600! Ponizej wklejam wycinki mojego programu do obslugi tego modulu: '------------------------------- ' modul RFiD ' ' 9600.1.0 ' dane 0xff,x,x,x,x,x,crc8 '------------------------------- {...} $baud = 9600 ' predkosc transmisji Config Serialin = Buffered , Size = 100 ' rozmiar bufora {...}...
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...
Ja robiłem podobnie do twojego tyle że zamiast "waitkey" używałem "inkey" w przerwaniu . Odbior: B = Ischarwaiting() If B = 1 Then C = Inkey() If C = "Q" Then Inputbin Aa(1) , Aa(2) , Aa(3) , Aa(4) , Aa(5) , Aa(6) End If End If Return Czyli Q robi u mnie za bajt startu a resztę danych przypisuję zmiennym . W programie głównym obrabiam te zmienne. ps:...
Skąd wiesz, że w zmiennych i EEPROM nic nie ma jeśli nie skompilowałeś programu? (Program się nie kompiluje bo brak deklaracji kz.) Wprowadzasz coś do bufora z zewnątrz? Z czym się komunikujesz i czy połączenie jest odpowiednio zestawione? (parzystość, stop, rodzaj danych) Po doprowadzeniu programu do ładu w symulatorze działa. Uruchom poniższy zmodyfikowany...
1) Warunek jest taki że string zawsze musi mieć taka samą długość 2) Użyj funkcji MID aby powycinać ze stringa kawałki z poszczególnymi temp 3) I tutaj uwaga - konwersje string->liczby są pamięciożerne. Jeśli nie wykonujesz żadnych obliczeń temperatury itp to odebrany string wyświetl na lcd jako string a nie jako bajty. Poprostu funkcją MID porozcinaj...
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...
Zwiększ bufor odbiorczy, a do sprawdzenia czy jest nowy bajt w buforze użyj Ischarwaiting() : [syntax=basic4gl] Config Serialin = Buffered , Size = 20 ' bufor 20 bajtów ........ Do If Ischarwaiting() = 1 Then P = "" Input P Gosub Przelicz End If Loop[/syntax]
Ischarwaiting() działa tylko w połączeniu z Config Serialin = Buffered i do tego Enable Interrupts .
Tak, wyświetlacz LCD mam podpięty na 100% do odpowiednich portów, gdyż zrobiłem już kilka ćwiczeń na nim i działał bez zarzutów. Wiem, że tam było COM2, ale zmieniałem na COM1 i nic to nie poprawiło. Jednak według mnie, to mam jakiś problem z programem, bo u mnie nawet w symulacji nic nie działa ;/ na początku w ogóle chciałbym, żeby sam terminal mi...
Tablica Bufor() jest typu Byte więc to nie Stringi i konwersja Hexval do niczego się nie przyda. Bajty są zamieniane niejawnie we Frame tylko na potrzeby wyświetlania na LCD. Coś w ten deseń powinno działać. Ogólnie to można to mocno poskracać, ale nie chciałem zaciemniać. [syntax=vbnet]Dim Arr(4) As Byte Dim Test As Single At Arr(1) Overlay Dim Bufor(9)...
Witam. Mam mały problem z przepisaniem wartości z DANE do zmiennej CZAS. Potrzebuję by po odczycie z UART wartość CZAS=DANE. Oczywiście żle to robię bo BASCOM pokazuje błąd. [syntax=vbnet] Config Serialin = Buffered , Size = 4 Enable Interrupts Declare Sub Kas_bufor Dim Uart As String * 1 Dim Buf As Word Dim Dane As String * 4 Dim Czas As Word Cls Locate...
Sprawdzałem wcześniej nie działa. Ischarwaiting też do końca nie rozwiązuje problemu. Program działa minutę po czym czeka minutę na dane z uart-a. Ręce opadają.
Ponawiam pytanie z postu wyżej :P Jakie pytanie :?: :) [syntax=vbnet]Do If 1 = Ischarwaiting() Then If 0 = Waitkey() Then Set Porta.2 Exit Do End If Loop [/syntax]
Próbowałem trochę z Inkey, ale tam znowu blokuje cały program - odczyt z zegara PCF8363 zatrzymuje się. Przed Inkeyem dobrze jest sprawdzić czy coś jest w buforze, funkcja IsCharWaiting(): [syntax=basic4gl] If Ischarwaiting() = 1 Then ' sprawdź czy jest jakiś znak do odebrania w buforze lub HW UART ................... End If[/syntax]
Wydaje mi się że masz bład w transmisji ze względu na to że masz kwarc 4Mhz i baud 1200. Tak przy okazji zegar masz przestawiony na wewnetrzne 4MHz czy zewnetrzny kwarc? Jesli na zewnetrzny to ustawiles prawidlowo fuse bity?? Podam Ci prosty program który u mnie dziala bez zarzutu przy kwarcu 8MHz i predkosci transmisji 9600: $regfile = "m32def.dat"...
po ciężkiej batalii już wiem jak rozwiązać problem... Podziękowania dla mirka36, który naprowadził mnie na config input :). Po ustawieniu config input=lfcr, echo=lfcr wsio pięknie działa, nie muszę 2 razy klikać butona, mogłem wprowadzić ischarwaiting() i zegar działa w głównym oknie programu. Dziękuję za pomoc, pozdrawiam.
Jak wysyłam mu: var int : array[0..3] of byte; str: string; begin int[0]:=1; int[1]:=127; int[2]:=250; int[3]:=50; ComPort1.write(int,4); comport1.ReadStr(str,60); edit5.Text:=str; to procek zapisuje do zmiennych: Nrled:127 Ledr:250 Ledg:50 Ledb:1 BASCOM: Sprawd = Ischarwaiting()...
Twój kod jest bardzo prymitywny, nie mam tu na celu naśmiewanie się tylko brak jakichkolwiek zabezpieczeń. O to mi chodzi że jest prosty i można by go trochę uodpornić przynajmniej. Input zawsze blokuje cały program dopóki nie zobaczy "Enter". (Bascom domyślnie wysyła Enter w komendzie Print chyba że użyjesz średnika) Lepiej jest go używać z Ischarwaiting(),...
... W jaki sposob mam wrzucić dane do bufora i później je odczytywać? Ty nic nie musisz wrzucać , o wszystko zadba kompilator.Zainteresuj się dyrektywą Config Serialin , funkcją Ischarwaiting() ,zmiennymi systemowymi _RS_HEAD_PTR0,_RS_TAIL_PTR0,_RS232INBUF0 . Bascom rulez :D Piotrek
U mnie działa coś takiego: Odczytaj_sprzetowy_uart: Uart_txt = "" Do 'Odbierz znak po znaku Kod = Inkey() Uart_txt = Uart_txt + Chr(kod) 'Zapisz w Uart_txt Bufor = Ischarwaiting() 'Zakoncz jeśli CR lub brak znaku w buforze Loop Until Bufor = 0 Or Kod = 13 Return Odczytaj_uart: Bufor = Ischarwaiting()...
Witaj. Delphi nie znam, wiem że jest to program bardzo podobny do VB. Ma wiećej możliwości oczywiście, myślę że jednak nie o to chodzi. DO RZECZY Chodzi Ci o to by np. po naciśnięciu przycisku program wysłał kod (jaki to teraz nie ma znaczenia) , a BasCom ma go odebrać. Poczym uC ma wykonać określoną czynność. Jeśli chodzi co o to ?? , sprawa jest prosta....
Config Serialin = Buffered , Size = 80 Enable Interrupts Dim _Flaga_1s as Bit _Flaga_1s = 0 Config Timer1 = Timer , Prescale = 64 Enable Timer1 : On Timer1 Co1s Cls Do If Ischarwaiting() = 1 Then Znak = Inkey() Print Chr(znak) ; End If if _Flaga_1s = 1 then ' ------> a tutaj wyświetlaj już sobie spokojnie co chcesz co...
No dobra. Wywal wszystko na linii Tx telefonu do Rx procesora. Ma być połączenie bezpośrednie. Na drugim kierunku zostaw tak jak masz. Poniżej kod do testów. Powinien działać. [syntax=basic4gl]$regfile = "m32def.dat" $crystal = 16000000 $baud = 19200 Config Lcd = 16 * 2 Config Serialin = Buffered , Size = 100 Enable Interrupts 'Declare Sub Oproznij_bufor...
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)...
Zrób sobie 6 element tablicy który będzie np znakiem ENTER (żeby rozpoznawać koniec tablicy) natomiast w Bascomie możesz wtedy użyć nawet polecenia INPUT, które po otrzymaniu znaku ENTER wpisze ci twoich 5 elementów tablicy do stringa (też jakby tablicy) - a ze stringa możesz to przełożyć do normalnej tablicy bascomowej - zrobić z tym co ci się żywnie...
Faktycznie teraz się dopatrzyłem, wcześniej korzystałem z polskiego Helpa do Bascoma i tam tego nie było. Czy tak będzie dobrze ?? Config Serialout = Buffered , Size = 20 Config Serialin = Buffered , Size = 20 , bytematch = 13 Enable Interrupts Dim A As Byte Dim Temperatura As Single Do A = Ischarwaiting() If A = 1 Then input temperatura End...
Moja propozycja działa poprawnie z VB.6 do Bascoma 'bascom do If Ischarwaiting() <> 0 Then A = Inkey() If A > 0 Then Select Case F_rs1 Case 0 If A = 2 Then F_rs1 = 1 _rsstr1 = "" ' Input _rsstr1 End If Case 1 Select Case A Case 3 F_rs1 = 0 Locate 1 , 7 Lcd _rsstr1 Locate 1 , 5 : Lcd Chr(7) Select Case _rsstr1 Case "RR" If Kasowanie_ustawien...
witam up avr po odbiorze znaku przez uart generują przerwanie (rxc), czy w bascomie istnieje możliwość "sprawdzenia" przerwania od uarta? wiem że jest polecenie "ischarwaiting" jednak to polecenie musze umieścić w kodzie programu i sprawdzać nim czy w buforze odbiorczym jest jakiś znak, natomiast interesowało bym mnie jakieś przerwanie które przerywało...
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
To można rozwiązać na wiele sposobów. Jeśli tylko cześć ramki jest stała a zależy Ci na wartościach odebranych to można użyć bufora kołowego i kiedy wykryjesz koniec ramki to wciągasz z bufora poprzednie siedem bajtów. Tutaj jednak sprawa jest prostsza. Poniższy mikroprogram powinien sprawdzać po kolei nadchodzące bajty. Jeśli się zgadzają to wskaźnik...
No tak :/ jeszcze jest Integer :D już mam, dla potomności: [syntax=basic4gl] Do 'Odbierz znak po znaku Kod = Inkey() Dane = Dane + Chr(kod) Port = Left(dane , 3) Stan = Right(dane , 4) Wartosc = Val(stan) Sprawdz = Val(stan) 'dodana zmienna Integer If Port = "red" Then Rgb = 1 If Port = "gre" Then Rgb = 2 If Port = "blu" Then Rgb = 3 'Zapisz w Dane...
Nie wiem czemu ma służyć ten kod. Napisany jest tak "dziwnie" że trudno nawet zgadnąć o co mogło autorowi chodzić :P Funkcja Ischarwaiting() zwraca 1 jeśli w buforze odbiorczym są jakieś odebrane znaki. Kiedy ich nie ma zwraca 0. Wynika z tego że ten kod "sprawdza czy w buforze nie ma żadnego odebranego znaku i Printuje tylko kiedy bufor jest pusty/czysty"....
Jak bascomem odczytac &h00 z uarta ? Gdy napisze do aa=inkey() print cjr(aa) loop wywala ciąg zer. Procedura IsCharWaiting rowniez nie dziala na &h00 Zeby nie bylo ciagu zer, musze trzecia linijke zamienic na if aa<>0 then print chr(aa) Gdy wysylam do uarta ciag np: FF F0 A1 00 01 00 00 02 program odczyta go jako FF F0 A1 01 02. Jest jakis...
Łap bo jak zaczniesz z tym Multimaster to się nigdy z tego nie wygrzebiesz a odkrywasz tu koło na nowo :D Po pierwsze nie zauważyłem wcześniej, że już skonfigurowałeś Serial in 0. Błędem natomiast jest jest używanie Serial out 0 a potem zamiast to wrzucić do bufora to wycinasz po jednej literce ze stringa i nadajesz pojedynczo... Po prostu napisz Print...
Poopuszczałeś trochę, a do tego literówki i dlatego wyrzucało błędy. Ten program kompiluje sie poprawnie. $regfile = "attiny2313.dat" $crystal = 11059200 $hwstack = 32 $swstack = 10 $framesize = 20 'DEKLARACJA ZMIENNYCH I PROCEDUR Dim Flaga As Bit , Flaga1 As Bit Dim Wylacz As Byte , Znak As Byte , Adres As Byte , Licznik As Byte Dim Znak1...
Niestety pomimo wielokrotnych prób nie udało mi się uruchomić układu. Pomiędzy TXD atmegi a RXD telefonu dałem rezystor 260 Ohm oraz diodę zenera 3V9, a program w bascomie jest następujący: [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 $Baud = 19200 Config Serialin = Buffered , Size = 200 Dim Kod As Byte Dim Bufor As Byte Do Print "ATE0"...
witam programuje w bascomie i nie wiem jak uruchomić drugi UART w Atmega162 zrobiłem to tak jak pisało w helpie, pierwszy uart działa bez problemu natomiast drugi nie $regfile = "m162def.dat" $crystal = 14745000 $baud = 9600 $baud1 = 19200 . . (konfiguracja wyświetlacza i deklaracja zmiennych) . . do A = Ischarwaiting() If A = 1 Then I = Inkey() Locate...
Jeżeli dobrze zrozumiałem Twój problem to spróbuj poniższy kod [syntax=basic4gl] $regfile = "m32def.dat" $crystal = 16000000 $baud = 19200 $hwstack = 32 $swstack = 10 $framesize = 40 Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2 '************************* Dim ***********************************...
Witam Odbieram pakiet danych (dokładnie 11 bajtów) przez sprzętowy RS232 z prędkością 38400 (uP ATMEGA 128L kwarc-8MHz) w Bascomie: Config Serialin = Buffered , Size = 7 . . . Odb = Ischarwaiting() If Odb <> 0 Then For L = 1 To 6 Y(L) = Inkey() Waitms 7 Next L Y(1) = Asc(y(1)) Y(2) = Asc(y(2)) Y(3) = Asc(y(3)) Y(4) = Asc(y(4)) Y(5) = Asc(y(5))...
Nie analizowałem programu dogłębnie ale widzę w nim INPUT. Jak dobrze pamiętam INPUT zatrzymuje program. Dane przychodzące należy sprawdzać za pomocą: [syntax=basic4gl]zmienna = ISCHARWAITING() 'lub zmienna = ISCHARWAITING( #kanał )[/syntax] Funkcja zwraca wartość 1 gdy w buforze transmisji sprzętowego układu UART znajduje się oczekujący znak. (Z drugiego...
Wszytko jest w Help Bascom'a, chyba nie ma sensu tego wklejać, skoro są tam gotowe przykłady. Zaglądnij do Index i tam znajdziesz polecenia WAITKEY, ISCHARWAITING, OPEN W kwestii modułów jakie posiadasz, nie korzystasz z RS232 tylko jak słusznie zauważyłeś z Pulse. Czyli na dowolny pin podajesz H lub L w określonym czasie i długości. Po drugiej stornie...
Ilosc kB nie ma znaczenia bo jest to zmienne i moze miec nawet xMB czas jest proporcjonalny do ilosci danych, lecz mam problem pomiedzy poprawna komunikacja miedzy DELPHI a BASCOM w wymianie tych danych teraz robie tak: #27 0..255 0 - nie będzie kolejnego bajta #13 1 - bedzie kolejny bajt START | DANA | BEDZIE NASTEPNA | KONIEC do if Ischarwaiting()...
Ale to nie jest kwestia tylko deklaracji :( ..... podałem tylko to jako przykład, że w ogóle jest to źle zrobione. Trzeba wręcz napisać sobie jakąś procedurę/funckję do pobierania najpierw danych z USART. Dopiero gdy zostaną odebrane to można napisać jakąś kolejną funkcję, która będzie sprawdzać te nadchodzące dane. Pisałeś wcześniej, że masz zrobioną...
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...
Jest taki sobie programik: $regfile = "m16def.dat" $crystal = 16000000 $baud = 9600 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0 Config Lcd = 20 * 4 Config Serialin = Buffered , Size = 10 Enable Interrupts Declare Sub Kas_bufor Dim Uart As String * 1 Dim Buf As Word Dim Dane...
Kierunek dobry, ale to pozwala na użycie tylko jednego znaku, który od razu jest przesyłany i następuje wykonanie instrukcji. Chciałbym aby instrukcja była wykonana po wpisaniu np. tekst1 Chyba trzeba zastosować bufor, który będzie dopisywał do stringu kolejne znaki i dopiero po pojawieniu się znaku CR ( czyli kod ASCI 13 ) sprawdzał, czy jest to właściwy...
Witam, mała aktualizacja program wyżej wysyła sms-a, ale mam problem z odbiorem według poniższego kodu, prawdopodobnie gubi znaki ... jak to można rozwiązać [syntax=vbnet] 'informacja że nadszedł nowy sms o numerze 23 +CMTI: "SM",23 'polecenie o odebraniu sms o numerze 23 at+cmgr=23 'odebrany sms +CMGR: "REC READ","+48","","17/03/25,17:04:26+04" STATUS...
najprościej : atmega1 atmega2 Rx----- ----Tx >< Tx----- ----Rx najprosciej program ? chyba bascom :P atmega1 : print "1" atmega 2 Dim Bufor As String * 24 Input Bufor Noecho If Ischarwaiting() = 1 Then '1 - odebrano znak,0 - pusty bufor ' tu odbierasz dane i robisz z nimi co chcesz End If
Witaj ja pisałem w bascomie i działa do dziś kod do wysyłania i odbierania wygląda tak: If Ischarwaiting(#2) <> 0 Then Do A = Inkey(#2) If A > 0 Then Led_rs = 1 Select Case F_rs1 Case 0 If A = 2 Then F_rs1 = 1 _rsstr1 = "" End If Case 1 Select Case A Case 3 F_rs1 = 0 Print #2 , Chr(2) ; "To odebralem na 2: " ; _rsstr1 ; Chr(3) Locate 1 , 1...
rozumiem że zmiany dokonałeś tutaj Loop Until Ischarwaiting() = 1 ' czeka na następny znak Dana = Inkey() Tekst = Tekst + dana Znajduje więc ramke jak poprzednio, a potem wywala krzaki z ASCII, rzadko jakąś litere z alfabetu.
witam . meczę sie już jakiś czas z odebraniem danych z modułu czytnika RFID. wysyła on ramkę ttl po zbliżeniu karty do czytnika w takiej postaci: RS232 TTL (ramka danych 0xff,x,x,x,x,x,crc8 ), x-dane karty oczywiście w Bascomie. próbowałem już z poleceniami Waitkey() inkey() czy sprawdzaniem bufora Uart Ischarwaiting(). $baud = 9600 oczywiście całość...
Mam problem z transmisją danych. Na PC mam uruchomiony terminal (terminal v1.9b), i jak wysyłam treść z AVR do portu RS232 to terminal poprawnie odczytuje wysłaną treść. Natomiast problem tkwi w transmisji w drugą stronę. Żeby sprawdzić czy poprawnie AVR odbierze dane wysłane z RS232, napisałem tak program żeby po odebraniu treści wysłanej z terminala...
Udało się, działa :D ehh jaki jestem szczęśliwy :D Tylko teraz kolejne pytanie. Chciał bym żeby program dzwonił po naciśnięciu przycisku. A teraz jest tak że po naciśnięciu przycisku program nie dzwoni. Mam kod taki: $regfile = "m32def.dat" $crystal = 8000000 $Baud = 19200 Config Serialin = Buffered , Size = 200 Dim Kod As Byte Dim Bufor As...
Możesz użyć Inkey. Tylko funkcja ta ma taką cechę że nawet jak nic nie ma w UDR to zwraca 0. Także najlepiej zrób to w ten sposób że najpierw sprawdzasz czy jest znak (Ischarwaiting) a potem jeśli jest, to odbierasz Inkeyem. Można też zrobić to w przerwaniu. Jeśli początek odbieranego tekstu masz stały to można też zrobić pętlę w któej ciągle pytasz...
Witam. Odczytuję dane z ESP8266 przez uarta takim sposobem: Czas,17:28 Thingspeak,20.1,45,998.1,4.1 Forecast,H,F,B Chciałbym je w taki sam sposób odebrać. Kawałek programu który zamieściłem jakoś tam działa. Dane są poprawne ale dowolnie pozamieniane między sobą i wyświetlane strasznie chaotycznie. Dodam że ramki z danymi z ESP wysyłane są w taki...
Nie wszystko w tej chwili jest używane, bo to testy. Na przykład Dim Napis As String * 15 Const Koniec = &HFF itp. [syntax=vbnet]$regfile = "m8adef.dat" $crystal = 8000000 '---------------------------- $hwstack = 128 $swstack = 128 $framesize = 128 $baud = 9600 Dim Napis As String * 15 Const Koniec = &HFF '------------------- Declare Sub Oproznij_bufor...
Witam, Mam taki prosty układzik na Atmedze8 z interface na MAX232. Układ odczytuje z PCta paczki 2-bajtowe z baud=600. Odczyt jest zrobiony w pętli Do Loop przez sprawdzanie zmiennej IsCharWaiting i odczytywanie bufora za pomocą Inputbin (to dane bajtowe). System (układ) działa OK ale jak mam go włączonego i podpiętego do PCta i włączam PCta to komputer...
Są dwie opcje: Oproznij_bufor: Do Kod = Inkey() 'Czyści bufor Bufor = Ischarwaiting() Dane = "0" Loop Until Bufor = 0 Return lub Odczytaj_uart: Kod = Inkey() Dane = Dane + Chr(kod) Bufor = Ischarwaiting() Ring = Instr(dane , Ringtxt) If Ring > 0 And Stan = 0 Then Stan = 1 Wait 1 Print...
Wiesz, każdy musi swoje odsiedzieć jeśli chce coś zrobić samemu a nie małpować :D Więc przykład działa na co jest dowód, ale inny moduł pewnie wymaga innego traktowania. Masz taki mikrokontroler że możesz uruchomić terminal na drugim USART. Możesz ustawić sobie jakąś diodę i po kolei zapalać ją w różnych procedurach i gasić na ich wyjściu. Będziesz...
Skorzystaj z instrukcji INKEY( ), WAITKEY , ISCHARWAITING. Do 'jakaś pętelka A = Inkey() 'odczytujemy znak If A > 0 Then 'czy był jakiś (> 0)? Print A 'jeśli tak to piszemy End If Loop 'to będzie pętelka nieskończona 'Powyższy przykład dotyczy SPRZĘTOWEGO układu UART! 'Program zapisany jako OPEN.BAS zawiera przykład użycia INKEY()...
można działać i z Inkey'em - ale kompletnie nie tak... ja polecam ci zapoznać się z poleceniem Ischarwaiting oraz zaprzyjaźnić się wtedy z poleceniem Input. Tylko trzeba ten komplet odpowiednio zastosować - jak? 1. w swojej pętli głównej jak najczęściej sprawdzasz poleceniem Ischarwaiting czy coś już znalazło się w buforze wejściowym - sprzętowym UART'a...
U mnie poszło coś takiego: $regfile "m16def.dat" Config Lcd = 16 * 2 $crystal = 1000000 $baud = 9600 Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portb.1 , Rs = Portb.0 Config Serialin = Buffered , Size = 12 Dim X As Integer , Y As Integer Config Pind.1 = Output Enable Interrupts ' Musisz włączyć...
Witam, to moje pierwsze podejście do BASCOMA, więc prosiłbym o wyrozumiałość. Podłączam atmege16 z zewnetrznym kwarcem 16MHz ( skonfigurowany poprawnie ) do SIEMENS S55. Predkosc 19200. Wysylanie komend działa poprawnie. Telefon dzwoni itd. Problem jest natomiast z kanałem zwrotnym. Próbuje wyświetlić na LCD odpowiedźi telefonu na komendy AT i np sygnal...
Ramkę złożoną z 32 bajtów odbieram w poniższy sposób: Kod: If Ischarwaiting() = 1 Then Inputbin Mess_1 , Mess_2 , Mess_3 , Mess_4 , M0_1 , M0_2 , M0_3 , M0_4 , M1_1 , M1_2 , M1_3 , M1_4 , M2_1 , M2_2 , M2_3 , M2_4 , M3_1 , M3_2 , M3_3 , M3_4 , M4_1 , M4_2 , M4_3 , M4_4 , Chk_1 , Chk_2 , Chk_3 , Suma_1 , Suma_2 , Koniec_1 , Koniec_2 , Koniec_3 , 32 End...
Ciężka sprawa, bo jak nawet w pętli do loop ischarwaiting() = 1 będziesz sprawdzał obecność modemu np. wysyłając mu jakąkolwiek komendę i sprawdzając czy jest odpowiedź, to przecież myśląc pesymistycznie zerwanie połączenia może nastąpić przy odczycie protokołu przez program i co wtedy? W jaki sposób moduł jest fizycznie połączony z płytką z...
sundayman --> poczytaj sobie o poleceniu Ischarwaiting to sprawa nabierze sensu, poobserwuj inne programy, idź dalej do przodu - bo wszystko da radę zrobić - i to nie w przerwaniu i wcale nie trzeba czekać na INPUT ;) utak3r --> skoro DS zwraca wyniki z kosmosu wzięte to świadczy tylko o jednym, że jest źle oprogramowany a nie że to jest kwestią jakichś...
MAma taki temat dotyczący Modbusa w Bascom. Dzięki koledze BART-projects uruchomiłem sczytywanie danych z miernika parametrów sieci. Do czytania wielu parametrów użyłem Timera, który co ok 0,5 sekundy sczytuje dane i wyświetla je na wyświetlaczu i ok. Jednak jak chce się czytać dane dla 3 faz - 12 parametrów jednocześnie to zabiera trochę czasu. Sam...
Witam serdecznie!!! Od długiego czasu walczę z Bascomem Atmega 128 i Uartem. Wysyłam komendy AT do modemu GSM i odbieram odpowiedzi. Wszystko jest ok, chodzi bez problemu tak z jakieś 2-3 (różnie to bywa) godziny a później ni z gruszki ni z pietruszki zaczynają sie śmiecie. Odpowiedzi wyświetlam na LCD. Bascom wersja 1.11.9.1 Oto część kodu odpowiedzialna...
Może uda mi się rozruszać dyskusję. Udało mi się już uruchomić projektor przez RS, jak i go wyłączyć. Natomiast mam problemy z odebraniem danych o jego stanie. Poniżej pokazuję moją procedurę odbioru danych: [syntax=basic4gl]Do Print Chr(13) ; "*pow=?#" ; Chr(13) Waitms 100 A = Ischarwaiting() If A = 1 Then 'we got something A = Inkey() 'get it Cls...
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ę...
dziwna sparawa pierw podpialem tak http://obrazki.elektroda.net/35_12524329... i oczywiscie zle podpialem zgodnie z twoim opisem M. S. i co zadzwonil heeh ale tylko raz odpalem zasilanie podpialem i cisza nic nie idzie dalej hehe tel sprawny bo podpialem go jeszcze pod kompa i dziala program $regfile = "m8def.dat" $crystal = 8000000...
Spróbuj z tym programem: $regfile = "m32def.dat" $crystal = 8000000 $baud = 9600 Dim I As Byte Dim Znak As String * 1 Do Input "podaj wartosc I:" , I Print "wartosc I wynosi:" ; I If I = 1 Then Do Znak = Waitkey() Print "odebrano znak:" ; Znak Loop Until Znak = "k" End If If I = 2...
Witam, Od wczoraj próbuję uruchomić symulację w Bascom-AVR i nic :( Oto mój kod do odbierania danych: $sim '----tylko do testu na kompie $regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 Dim A As String * 1 Config Serialin = Buffered , Size = 20 Enable Interrupts Print "Start" Do If Ischarwaiting() = 1 Then A = Waitkey()...
Witam Mam pytanie ten uC posiada 4 porty UART jak ja w BasComie powinienem zdeklarować. Chcę do RXD0 i TXD0 podłączyć przez RS232 inny uC a do RXD1 i RXD1 również inny uC przez RS232 natomiast TXD2 i RXD2 oraz TXD3 i RXD3 ustawić jako porty RS232C. To było jedno pytanie a drugie to: Jak łączę jeden uC do drugiego i napiszę w bascomie coś takiego to...
Ale dziwne że jeśli pominę przerwania i config serialin to działa bezbłędnie (w sumie 99/100 bo jadę na zewnętrznym kwarcu 16Mhz i jakieś błędy są możliwe) ale nie tak jak chciałem bo musiałem wpiąć to w pętlę główną: To lata w pętli głównej: 'RS232 UART4 - ODCZYT DANYCH ZE STEROWNIKA KOMINKA Rs4_flaga = Ischarwaiting(#6) : If Rs4_flaga...
bingo napisałem już program który pokazuje odebrane sygnały z ibus szyny błędnie myślałem ze trzeba odwrócić sygnał, zastosowałem interfejs od gościa który zrobił takie coś na microchipie czyli tylko dioda i opornik (u mnie 1n4148 i 10k) [syntax=basic4gl]Serial_flag = Ischarwaiting() 'jesli znak czeka to ustaw flage If Serial_flag = 1 Then ' jelsi flaga...
Witam, mam problem z podstawową obsługą siemensa CX65 przez atmegę. Proste sterowanie siemensem c35i w miarę opanowałem, ale mam tylko 1 egzemplarz tego telefonu, w dodatku w marnym stanie, więc postanowiłem powalczyć z trochę nowszym. Przez hyper terminal telefon działa znakomicie, po podpięciu do atmegi nie dzieje się nic. Próbowałem z zasilaniem...
Witam mam 2 kody czytające uart. Problem jest taki ze jeden działa a drugi nie i nie wiem co jest powodem. Kawałki kodu pracują na Atmega8L. Z góry dzięki za pomoc. - nie działający Odczytaj_sprzetowy_uart: Uart_txt = "" Do Kod = Inkey() Uart_txt = Uart_txt + Chr(kod) Bufor = Ischarwaiting() Loop Until Bufor = 0...
Witam wszystkich mam taki problem.Potrzebuję z aplikacji android wysłać cztery zmienne typu Word do procesora Atmega 32 i zapisać je w Epromie.Dane wysyłane w Srtingu. Na razie wysyłam dane z terminala z Pc-ta.Aplikację na Android pisze mi ktoś inny.Potrafię wysłać jedną zmienną nadaną jako String przekształcić na Word i zapisać ją w Eprom na procku...
ischarwaiting interrupts inputbin ischarwaiting bascom projekt bascom
kodowanie drzwi smart goodram pralka korki
instrukcja obsługi toyota yaris instrukcja obsługi toyota yaris
Partner P145107HRB Briggs & Stratton 14,5 HP – gaśnie na małym gazie, czyszczenie gaźnika, filtr paliwa PEUGEOT Partner Tepee – światło STOP na drzwiach nie gaśnie po naciśnięciu hamulca