Wskazówki : [syntax=basic4gl] Config Serialin = Buffered , Size = 254 , Bytematch = All Enable Serial Enable Interrupts Serial0bytereceived: Return [/syntax]
Możesz zrobić co chcesz byleby polecenie Config 1wire było już po konfiguracjach portu. Co do UARTu to też nie ma znaczenia, bo jeśli Bascom wykryje użycie w kodzie Config Serialin/Serialout lub nawet samo użycie Print to kompiler ustawi je sam automatycznie.
Poczytaj helpa z Bascoma ale angielskiego. Szczególnie o: "Config serialin" z uwzględnieniem "BYTEMATCH" - to jest obsługa UART w przerwaniu uproszczona na maxa. Warto przejrzeć: http://www.elektroda.pl/rtvforum/topic14... i jeszcze ten: http://www.elektroda.pl/rtvforum/topic14...
Po co ci takie wielkie bufory ilku bajtów. Bufor wyjściowy Serialout jest nie potrzebny. Zakomentuj go (i to już może Ci od razu pomóc). Zamiast flushbuff możesz spokojnie napisać Clear serialin Proponuję też przejść na odbiór tego znaku w przerwaniu za pomocą Config serialin z opcją BYTEMATCH=ALL Poczytaj na temat tej opcji w helpie (angielskim)
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...
Może się pomyliłem, ale chyba przerywasz sobie odbiór co 2ms. Dlaczego nie użyjesz wyższego preskalera? Np. 1024? Możesz nawet po ustawieniu Flagi wyłączyc Timer i po odbiorze włączyć ;) Timery można dowolnie konfigurować podczas pracy programu. Druga sprawa ustaw sobie odbiór do bufora w tle (Config Serialin = Buffered, Size..)
No to przyjacielu jaka jest ta super komenda ? Ta super komenda , a właściwie jest to znane - choć nie wszystkim i nie do końca - polecenie konfiguracyjne portu szeregowego Config Serialin = Buffered , Size = XX , Bytematch = YY Zajrzyj teraz do pomocy Bascoma i przeczytaj , jakie wspaniałe możliwości daje nam ostatni (zaznaczony na niebiesko) parametr...
A po co to Enable/Disable w obsłudze ? no i druga sprawa - ideą przerwań jest, że nie mogą być w nich pętle, przemyśl konstrukcję obsługi tak, aby przy każdym czytaniu UDR dany znak był zapisywany pod kontrolą programu do bufora. To chyba się nie przyda : Config Serialin = Buffered , Size = 20
Profesjonalnie to można programować w każdym języku, tylko trzeba go po prostu znać i umieć stosować w praktyce co najważniejsze. Dla takich początkujących jak ty Bascom powinien być jednym z lepszych języków tym bardziej, że nie rozumiesz jeszcze przerwań. Bascom daje ci gotowe rozwiązania w tym zakresie na maxa - popatrz sobie na Config Serialin ........
Nic nie musisz (jeśli chodzi o Bascom - sam robić w przerwaniu) Bascom ofruje ci za free - pełną sprzętową obsługę RS232. Zapoznaj się tylko z poleceniem Config Serialin oraz z parametrem Bytematch tego polecenia - a wszystko stanie się jasne. Nic nie będziesz musiał sam oprogramowywać w przerwaniu bo to jest bez sensu. po prostu będziesz wysyłał paczki...
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
Ma się dobrze jeśli ma odbierać dane z bufora. Jeśli Twoje Print Komenda ; Chr(13); zmieniłbyś na Print Komenda To z powodzeniem mógłbyś odbierać w przerwaniu Pozostało by ci tylko ustawić: Config Input = Crlf , Echo = Crlf Config Serialin = Buffered , Size = 80 , Bytematch = 13 a przy odbieraniu: Input Odczyt Noecho
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()...
kiedyś też się męczyłem i doszedłem do tego $baud = 9600 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config Serialin = Buffered , Size = 64 Config Serialout = Buffered , Size = 64 Print "COM1 INT : DONE" $baud1 = 9600 Config Com2 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1...
A teraz jeszcze pytanie z innej beczki. Procesor steruje pilotem RC5 na przerwaniu INT0, chciałbym jeszcze dodać obsługę RS232 ale nie chcę żeby ciągle było sprawdzane czy coś jest przesyłane bo to mi tylko spowolni program, czy jest możliwość wykrycia ze jakieś dane dochodzą do procesora i wtedy ustawienia flagi po tym będzie wykonany odbiór danych...
...I jeszcze stałe wyławiane z odebranego tekstu. Dzwtxt = ": +48" A ja się na tym "przejechałem" , bo Era we własnej sieci , nie wysyła przefiksu kraju , czyli owego +48. Wracając do "techniki" odbierania transmisji z telefonu , stosuję ... Config Serialin = Buffered , Size = 254 , Bytematch = 13 ... oraz Serial0charmatch: lds r24,{event}...
Acha no tak, za szybko napisałem. Wszystko przez to, że WAITKEY() czeka na znak - zatrzymuje program. W takiej sytuacji trzeba użyć INKEY(), ale wcześniej sprawdzać, czy jest odebrany jakikolwiek znak. Dodatkowo zastosowałbym buforowanie transmisji. CONFIG SERIALIN = BUFFERED , SIZE = rozmiar (c) Zbigniew Gibek, 2002-2005 (c) MCS Electronics,...
Tych znaków jest trochę więc proponuję bufor wejściowy. Wyświetlacz przyjąłem 16*2: $crystal = 4000000 $baud =4800 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.6 , E = Portc.2 , Rs = Portd.6 Config Serialin = Buffered , Size = 32 Dim Znak As Byte Dim I As Byte Cls Enable Interrupts I = 1 Do Do...
Witam, zanim zabierzesz się za pisanie własnej obsługi przerwań do RS232 w Bascomie, to może najpierw spróbuj zrobić to w oparciu o dobrodziejstwa jakie daje ci Bascom. nie znasz poleceń INPUT , INKEY czy PRINT ???? do tego jeszcze może Config Serialin bo w powyższym kodzie odstawiasz niezły "miszmasz" i nie ma co się dziwić, że ci nie działa. Oczywiście...
EEEEEEEj kolego - teraz to żeś zamieszał ;) .... sorki że się uśmiecham ale to nie z ironii tylko z pomysłowości ;) A co ma piernik do wiatraka czyli co ma jakieś INT2 do UART1 ???? no jak można tak odczytywać znaczenie opisu różnych funkcji nóg procesora To tylko oznacza, że ten pin może pełnić rolę albo zwykłego pinu I/O albo rolę RxD1 (czyli wejście...
:arrow: CONFIG SERIALIN, CONFIG SERIALOUT.
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...
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...
Ło matko! ludzie co wy tu opowiadacie? Jarosław J - odnośnie twojego problemu ale już konkretnie: 1. Możesz najspokojniej w świecie przy komunikacji dwóch procków zrobić tak, że jeden będzie taktowany wewn oscylatorem a drugi np. kwarcem (Żaden problem) !!! 2. ale używaj sprzętowego UARTA w Bascomie a nie to co tutaj wszyscy razem wyczyniacie ;) 3....
Np za pomocą config serialin opcja Bytematch. Ustawiasz np. na 13 i masz wykrywanie kiedy nadchodzi znak "enter" czyli CR W zależności też czy razem ze znakiem CR masz też LF to ustawiasz sobie już w config Input. Teraz nie mam możliwości sprawdzić ale czy "config serialin" działa z programowym com-em ?
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...
Poczytaj o instrukcji Config Serialin. To jest bufor wejściowy w USART w bascomie.
Kwarc zmieniłem na 16 MHz, i zabieram się za szukanie info o Config serialin :)
Spróbuj: Config Serialin = Buffered, Size = 10
za pomocą Inkey() a wtedy bufor automatyczny konfigurujesz tak: Config Serialin = Buffered , Size = 10 , Bytematch = All
Ischarwaiting() działa tylko w połączeniu z Config Serialin = Buffered i do tego Enable Interrupts .
Declare Sub Get_th(t As Word , H As Word) Config Serialin = Buffered , Size = 128 Config Serialout = Buffered , Size = 128 Dht_put Alias Porta.1 Dht_get Alias Pina.1 Dht_io_set Alias Ddra.1 Dim Crc As Byte 'zmienna do przechowywania bajtów parzystości Dim Mybyte As Byte 'zmienna do obliczania bitu parzystośći Dim Sensor_data As String * 40...
Próbowałem wcześniej Config Serialin, ale help Bascoma nic nie wspomina Bytematch dopiero na forum coś więcej jest Config Serialin = Buffered , Size = 7 , Bytematch = 13 ( czyli rozmiar bufora, oraz znak po którym zostaną wpisane znaki do stringu, później Input, który ładnie wytnie znak określony w Bytematch i od razu jest gotowy do badania warunków...
Miże to pomoże: Config Serialin = Buffered , Size = 200 Size ustala wielkość bufora.
: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 {...}...
Dodatkowo w Bascomie bardzo łatwo zrobić bufor danych, pogoglaj na temat poleceń Config serialin oraz Config serialout .
Bytematch znajduje sie na stronie http://avrhelp.mcselec.com/ pod config serialin , zastosowałem inny patent "case" zaczerpnięty od xury , jeszcze pracuje nad ukończeniem programu ale pomysł trafiony . Co do Bytematch nie zabardzo mogę to powiązać z przerwaniami
Ustawiłeś w programie bufory? Config Serialout = Buffered , Size = ? - liczba znaków Config Serialin = Buffered , Size = ? - liczba znaków
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...
Pewnie się mylę ale w helpie bascoma jest : The receiver can send data to the sender and it will check the CTS pin to see if it may send data. In order to work with CTS-RTS, you need both a serial input buffer, and a serial output buffer. So use both CONFIG SERIALIN and CONFIG SERIALOUT to specify the buffers. The CTS-RTS can only be configured with...
$regfile = "m644def.Dat" $crystal = 16000000 $baud = 19200 '$baud #1 = 19200 $hwstack = 128 $swstack = 100 $framesize = 100 Config Serialin = Buffered , Size = 200 Config Serialin1 = Buffered , Size = 200 Przy dodaniu ostatniej linijki wyrzuca błąd 117
Poczytaj dokładnie angielskiego helpa o config serialin. Jak już zrozumiesz to sam się zdziwisz, że to takie proste. Bo wystarczą nawet tylko dwie linijki kodu by odbierać z Uarta. Mala podpowiedź: Serial0CharMatch
zmienna a,oraz zmienna c musi być typu volatile - to dotyczy programu w C. W bascomie to program musi mieć buforowanie włączone.Inaczej znaki ci uciekną zanim je zauważysz (poczytaj o config serialin bufered).
Czy w Bascomie da się je prawidłowo wysterować? deklaruję tak: [syntax=basic4gl]Config Serialin = Buffered , Size = 20 'konfiguracja RS232 (linia buforowana baud 9600) Config Serialin1 = Buffered , Size = 20 'konfiguracja RS485 (linia buforowana baud 9600) $baud = 9600 $baud1 = 9600[/syntax]
To nie jest konfiguracja sprzętowego UARTu tylko programowego. Sprżetowego nie trzeba konfigurować. Użycie Print,Inkey,Input bez numeru kanału domyślnie używa sprzętowego Uart. Jedynie można sobie ustawić bufor wejściowy i wyjściowy poleceniami Config Serialin/Serialout
No, coś mi się wydaje, że jednak może nie do końca rozumiesz właśnie to wszystko i stąd takie podajęcie. Co to w ogóle dla ciebie znaczy, że: Bo niby po czym innym program ma poznać czy odczytane dane pasują w tym określonym miejscu ? .... toż twoja próba obsługi tego przerwania - pokazuje, że w 1000% mógłbyś wykorzystać mechanizm z Bytematch Ustawiłbys...
chyba wiem w czym problem z tym błędem przy próbie kompilacji "Config Serialin = Buffered , Size = ..." Proponuje zainstalować demo lub zakupić oryginalny kompilator :), bo na z c r a c k ' owanej wersji tak się dzieje
Myślałem, że za buforowanie odpowiada: Config Serialin = Buffered , Size = 255 No nic... W takim razie zabieram się za poszukiwanie informacji odnośnie FIFO i jak to robić w Bascom-ie.
Z tego co wiem to wystarczy linia Config Serialin = Buffered , Size = x i Enable Interrupts i w symulatorze działa odbieranie komend a w rzeczywistości nie :/, co dziwnego jest też że raz odbierał dane przez chwile, potem odłączyłem zasilanie i znowu podłączyłem i już nie działało :/
Czemu w nadajniku komfigurujesz bufor wejsciowy? Po co wogole to konfigurujesz? Kolega mógł po prostu się pomylić, i zamiast CONFIG SERIALOUT napisał CONFIG SERIALIN. Przy wolnych prędkościach transmisji lub przy wolnym zegarze kontrolera tak jest nieco lepiej.
Możesz INPUT a możesz też na kilka innych sposobów. Zależy jakie dane chcesz przesyłać i co później z nimi robić. Jeżeli będziesz używał INPUT to musisz zakończyć to Enterem. Proponuję poczytać pomoc do Bascoma (Inkey(), Config Serialin, Waitkey()).
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().
Spróbuj odbierać przy użyciu : Config Serialin Bytematch = ALL zamiast Urxc. Jeszcze lepiej gdybyś ustawił bufor i odbierał z bufora całe linie zakończone CRLF
jeżeli użyłeś config serialin=buffered, size=10 to musisz podawać dane powoli bo jak ci się przepełni bufor uarta to kich. rozwiązanie: albo zwiększysz wielkość bufora uart albo będziesz przesyłał bez bufora. przy tylu danych proponuje zrezygnować z bufora.
Nie wiem czy dobrze kombinuje i trochę mi nie pasuje co zrobiłem. Do tego celu wykorzystuje polecenie Config Serialin które po konfiguracji wygląda tak: [syntax=basic4gl] Config Serialin = Buffered , Size = 20 Config Timer0 = Timer , Prescale = 256 Dim A As String * 10 Dim Odczyt As Bit Dim I As Word On Timer0 Przerwanie Enable Interrupts Enable Ovf0...
ale po co bawisz się w odbieranie waitkey??? już pisałem wcześniej: 1. Utwórz sobie (sprzętowo obsługiwany) bufor wejściowy dla RS232 - za pomocą Config Serialin 2. Potem używaj gdzieś w kodzie (w pętli głównej czy gdzie chcesz) polecenia Ischarwaiting - aby dowiedzieć, się czy czeka coś na ciebie w buforze 3. Jeśli coś jest w buforze to odczytujesz...
Bo pierwszy kod jest logicznie błędny. Do stringa dodawany jest znak entera, a nie powinien. Poza tym skoro i tak czekasz na enter to dlaczego nie użyjesz input ? A tak poza tym to proponuje robić odczyt w przerwaniu. Polega to na odpowiednim skonfigurowaniu "Config serialin" i jego opcji BYTEMATCH.
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]
Dlatego, że wysyłasz dane z ATmega8535 ciągle proponuję odczytywać przy pomocy poleceń WAITKEY() lub INKEY(). INPUT akurat do tego nie jest najlepsze. Proponuję też skonfigurować bufor UARTA. Config Serialin = Buffered , Size = 8 O tych wszystkich poleceniach znajdziesz w pomocy.
UART konfiguruje tak: Config Serialin = Buffered , Size = 22 , Bytematch = 13 a przerwanie: Serial0charmatch: lds r24,{event} inc r24 sts {event},r24 Return W pętli głównej czekam na event, i tu można byłoby przepisać bezpośrednio z bufora UARTa do tablicy. Tylko gdzie jest ten bufor i czy można bezpośrednio przepisać ramkę ?...
Witam Mam następujący problem po przekompilowaniu programu pojawia się kilka błędów Error 5 oraz Error 320. Błędy te wyświetlają się wyłącznie po zadeklarowaniu bufora Config Serialin=Buffered, Size=254 Config Serialout=Buffered, Size=254 W załączniku przesyłam zrzut ekranu. Proszę o pomoc pierwszy raz z czymś takim się spotkałem Pozdrawiam Michał [/img]
Kurcze, nie wiem co tam dokładnie... np każe wysłać zamiast na LCD ,do pinu jakiś text 20znakowy(20bajtów)(jakąś zmienną Word lub ew. String,w każdym razie coś co zrozumie uP odbiorczy i to sobie przetłumacy na txt) ,może za pomocą Shiftout - na drugi uP,który go dopiero da na LCD. Lub ew. Config serialin/out
... 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
Temperaturę odczytaną z ds'a formatuję i wrzucam do zmiennej string poleceniem FUSING, np: Temp = Fusing(t1 , "#.#") gdzie Temp to string, a t1 to zmienna single z odczytaną temperaturą. Następnie mam kilka warunków if..then gdzie zmienna Temp jest uzupełniana znakami (np. spacji), tak aby fragment łańcuch z pojedynczą temperaturą miał zawsze tą samą...
Analizowałem dla innego kolegi mój program w którym stosuję UART. Widzę, że na początku odblokowałem globalne przerwania z adnotacją jak niżej. Enable Interrupts 'Przerwania od UART zaszyte w Bascomie Wstaw może tą linię w swój program. Poczytaj help'a - CONFIG SERIALIN
Nie zauważyłem na początku programu następującej konfiguracji. Przeznaczenie: Konfiguruje sprzętowy układ UART by używał bufora wejściowego. Składnia: CONFIG SERIALIN = BUFFERED , SIZE = rozmiar gdzie: rozmiarliczba określająca ile bajtów SRAM przeznaczyć na bufor wejściowy. UART jest odczytywany kiedy program chce, a nie kiedy przychodzą dane. Może...
Myślałem nad tym ale ...... Instrukcja CONFIG SERIALIN Przeznaczenie: Konfiguruje sprzętowy układ UART by używał bufora wejściowego. (c) Zbigniew Gibek, 2002-2005 (c) MCS Electronics, 1999-2005 Jest procedura , która pozwoli mi na dowolny pin wysłać dane w standardzie uart ? Żeby sprzętowy w attiny 2313 to poprawnie odebrał ?
Działa elegancko. Żeby było wiarygodnie to nawet wygrzebałem Ardu Leonardo z m32u4 na pokładzie. Na jedną rzecz bym jeszcze uważał. Twój kod nie jest w żaden sposób synchronizowany. Może się kiedyś zdarzyć, że jedna z wiadomości nie dojdzie. Z nie będzie miało wartości 3 i przy nastepnej wiadomości procesor zacznie przypisywać wartości innych zmiennych...
Witam, Co może być przyczyną zmiany szybkości transferu ? Mam AVR przestawionego programowo na 4MHz, fragment kodu: [syntax=basic4gl]$regfile="m328pdef.dat" $crystal=4000000 $baud=19200 CLKPR=128 CLKPR=1 ' 8MHz -> 4MHz Config Serialin=Buffered ,Size=22 ,Bytematch=13[/syntax] a Bascom sam przestawia niepotrzebnie U2X0 na 2x czyli 38400.
proponuję zrobić to tak [syntax=basic4gl] Config Serialin = Buffered , Size = 9 Dim Az(9) as Byte Do Clear serialin Do Waitus 10 Loop Until _rs_bufcountr0 = 9 Inputbin Az(1) , 9 Loop[/syntax] najpierw wyczyść bufor wprowadz program w pętlę i czekaj w pętli na zapełnienia bufora ale uwaga program będzie czekał na dane jeśli nie przyjdą to czekanie w...
zapomnij w takim prostym przypadku o przerwaniu Urxc (wywal z tego swojego kodu wszystko co masz związane z tym przerwaniem), zamiast tego - to co wpisałeś w przerwaniu - daj w pętli głównej - i wszystko w cudowny sposób ci ruszy. Co więcej - zainteresuj się takim poleceniem jak Config serialin - dzięki czemu włączysz sobie sprzętowy bufor RS232 - który...
w helpie do bascoma jest wszystko bardzo dobrze opisane podstawa to $crystal = xxx 'Częstotliwość $baud = xxx 'Prędkość UART można też dodać Config Serialin = Buffered , Size = 50 'Konfiguracja UART IN Config Serialout = Buffered , Size = 50 'Konfiguracja UART OUT ale bez tego też chyba działa niejestem pewien ale wydaje mi się też że trzeba odblokować...
Ja zrobiłbym tak: 'Tutaj ustaw $Baud, $crystal, itp Config Serialin = Buffered , Size = 20 dim znak as byte Enable Interupts On URXCprzerwanie Enable URXC ... przerwanie: disable URXC do Znak = Inkey() If znak = #48 Then ... End If Loop Until _rs_head_ptr0 = _rs_tail_ptr0 Enable URXC Return
Autorze tematu, chyba nie bardzo rozumiesz kod, który stworzyłeś, hm... :?: [syntax=basic4gl]Config Serialin = Buffered , Size = 18 , Bytematch = 13 '... Serial0charmatch: 'po odebraniu znaku Chr(13) zwiększenie licznika lini(zdarzeń) lds r24,{event} inc r24 sts {event},r24 Return [/syntax] Ten "tandem" i tak nie działa, bo zapomniałeś włączyć przerwań....
Witam serdecznie, przejrzane tematy nie dały mi odpowiedzi na moje pytanie. Poniżej fragmenty kodu: [syntax=basic4gl] $regfile = "m1284pdef.dat" $crystal = 11059200 $baud = 9600 Config Com2 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config Serialin = Buffered , Size = 180 , Bytematch = 10 Config Serialin1 = Buffered...
Nawet w tak krótkim kodzie masz nieszły bajzel. Deklaracja zmiennej gdzieś między deklaracjami przerwania. Najpierw włączasz globlane przerwania potem dopiero poszczególne sygnały (a powinno być na odwrót). Nie CONFIG PORT tylko CONFIG PIN jeśli chodzi o jeden pin portu B. Co dalej? Pętla DO ... LOOP + END w której będzie główny program, oraz kod obsługi...
Witam ponownie! Problem faktycznie leżał w buforze odbioru danych. Należało powiadomić kompilator o chęci użycia takiego bufora: Config Serialin = Buffered , Size = 200 Przyznam, że próbowałem to zrobić wcześniej i uP nie odbierał już niczego, a to przez to, że nie włączyłem obsługi globalnych przerwań ;) Enable Interrupts Teraz już wszystko działa...
Ja używam innej konfiguracji portu bo też miałem problem i wszystko zadziałało Config Serialin = Buffered , Size = 100 , Bytematch = 10 ' bo telefon odpowiada 0D0A = 13 10 = ClLf Echo Off Config Input = Crlf , Echo = Crlf bytematch = 13 (0Dhex) nie jest dobrym pomysłem bo końcowy znak to 10 (0Ahex), spróbuj tak jak wyżej. Ważna jest też config input...
Bart : Dziękuję za podpowiedz z Config input. Faktycznie teraz nie ma że widze w prawym stringu gdy jego wartość jest wysyłana jako 4 miejscowa. Inkey niepotrzebny nie widać LF czy CR ( te 3 poziome kreseczki). Ale odbiornik potrafi zamienić lewo na prawo i tak wyświetla ( czasami 4 krotny reset trzeba wykonać aż załapie odpowiednio ramke)-- nie znam...
Witam, ja się w ogóle nie dziwię, że masz taki efekt, ja gdybym był na miejscu procesora i gdybym otrzymał taki kod to też bym zwariował na maxa ;) Na prawdę jeszcze czegoś takiego to nie widziałem, żeby : 1. nie skorzystać ze sprzętowego UARTA - gotowca w bascomie 2. nie skorzystać z pięknych buforów cyklicznych - gotowca w bascomie tylko w zamian...
Cóż, pewnie takie rzeczy są w tym prymitywnym języku ciężkie do osiągnięcia. Fragment pomocy do bascoma: Konfiguruje sprzętowy układ UART by używał bufora wejściowego. Składnia: CONFIG SERIALIN = BUFFERED , SIZE = rozmiar gdzie: rozmiarliczba określająca ile bajtów SRAM przeznaczyć na bufor wejściowy. Opis: Gdy w programie użyta zostanie instrukcja...
Witam, Mam problem z uruchomieniem uartów na Atmedze 128 , znalazłem taki kod w starym poście i raczej nie działa [syntax=vbnet] $regfile = "m128def.dat" $crystal = 16000000 'UART config - $baud = 9600 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config Serialin = Buffered , Size = 64 Config Serialout...
Napisałem coś takiego: $regfile = "m16def.dat" Config Portb = Output Portb = &B00000000 $crystal = 16000000 $baud = 9600 Config Serialin = Buffered , Size = 20 Dim Uart As String * 10 Enable Interrupts Do Uart = Inkey() If Err = 0 Then If Uart = "12345" Then Portb.0 = 1 End If If Uart = "1" Then Portb.0 = 0 End...
Witam. Proponuje tak jka kolego radzi uzyc bufora, który automatycznie działa. tu przykład: Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config Serialin = Buffered , Size = 7 -------' wielkośc 7 znaków Enable Interrupts -------' musisz włączyć przerwanie później w programie dajesz Bufor_rs = Bufspace(1)...
Podstawowy błąd w programie odbierającym dane to za mały bufor, dane mogą być nadpisywane. Bufor powinien mieć minimum 14 bajtów, zmienne są wysyłane w postaci łańcucha np. "-32768,-32768",$0D. Do prawidłowej pracy bufora wymagane jest globalne włączenie przerwań (Enable Interrupts). [syntax=basic4gl]Config Serialin = Buffered , Size = 28 , Bytematch...
Witam, spróbuj tej wersji, mi działa :) [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 Config Lcdpin = Pin , Db4 = Pordc.3 , Db5 = Pordc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Config Lcd = 20 * 4 'Config Serialin = Buffered , Size = 15 Config Pind.2 = Output Kierunek Alias Portd.2 'zmienia kierunek transmisji...
Tak ustawiłem UART-y $regfile = "m2561def.dat" $crystal = 11059200 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0 ' Inicjalizacja wyświetlacza LC Cls ' Czyszczenie Config Com1 = 115200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol...
Po wczorajszym, (zamknięcie tematu, i itp) Postanowiłem że postaram się coś samodzielnie wyklecić w bascomie (w końcu to mój projekt) narazie to tylko przykładowy kod, w którym chodzi tylko o wyjaśnienie zagadnienia, i ewentualne poprawki. MASTER : $regfile = "attiny2313.dat" $crystal = 4000000 Config Serialin = Buffered , Size = 15 Const...
Problem rozwiązany 1. na co nie zwrociłem uwagi to brak odpowiedniej konfiguracji UART $regfile = "m8def.dat" $crystal = 8000000 $baud = 4800 $hwstack = 160 $swstack = 40 $framesize = 120 Config Serialin = Buffered , Size = 200 2. Sprawdziłem 11 szt atmegi8 i ani jedna nie działała na PORCIE C!!! zmieniłem na PORT D, i działa idealnie: Open "comd.2:4800,8,n,1"...
Mnie ktoś pomógł to teraz się tym podzielę Nadawanie: -----konfiguracja------- $baud = 2400 Config Serialin = Buffered , Size = 20 Config Serialout = Buffered , Size = 20 ---------jakiś tam program----- Print Temperatura ; Chr(13) ; 'Wyślij po RS wartość zmiennej temperatura Odbiór: $regfile = "m8def.dat" $crystal = 8000000 $baud =...
Przeciez powyzej zamiescilem kod programu ktory ma wgrany Atmega $regfile = "m8def.dat" $crystal = 16000000 $baud = 9600 Dim Znak As String * 6 Config Portd.2 = Output Config Serialin = Buffered , Size = 15 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Wait 5 Set...
Witam, Komunikuje się miedzy dwoma atmegami i gdy używam (Atmega8) Print #1 ----> Input #2 (Atmega16) jest wszystko ok ale gdy próbuje zrobić (Atmega8) Print #1 ----> inkey(#2) (Atmega16) to wywala śmieci. Chce wysłać pojedynczy znak np M wysyłam jako chr(77), a zamiast tego wyczytuje inne znaki. Gdy używam inkey(#2) ale wprowadzam z terminala jest...
$crystal = 8000000 'częstotliwość kwarcu $baud = 38400 Dim Zmienna As Byte , Zmienna2 As Integer Dim Ignorowane As Byte , Id As Byte , Dane As Byte Dim A As Byte , B As Byte 'Config Serialin = Buffered , Size = 20 Zmienna = 5 Do Waitms 500 Cls Lcd Id ; " " ; Dane ; " " ; Zmienna ; " " ; B Inputbin Id , Dane , Zmienna ,...
Kod poprawiłem, a z tym: Obroty1 255 Obroty2 120 Obroty3 100 Enter niekoniecznie tak musi być, może być Obroty1 200 Enter Obroty2 120 Enter Obroty3 200 Enter. Domyślam się, że dużo pisania by było, gdyż trzeba dopisać dużo zmiennych i je uwarunkować, mimo wszystko - jeszcze raz dziękuję za pomoc. P.S. Czy można prosić o sprawdzenie tego fragmentu kodu,...
Ello Mozecie mi powiedziec czemu jak sobie napisze prosty programik w BASCOM AVR. To pokazuje mi caly czas 1023. Nie podpiąlem pod AVCC ATmega32 tego dlawika 10uF... , ale nie sadze zeby to mialo taki wplyw ?? w ogole nic sie nie zmienia wiec mysle ze to problem programowy.... pomocy :( $regfile = "m32def.dat" $crystal = 1000000 $baud = 1200...
Zrób prosty test - wgraj taki program i powiedz co się dzieje [syntax=basic4gl] $regfile = "m32def.dat" $crystal = 16000000 $baud = 9600 Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2 Config Serialin = Buffered , Size = 20 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits...
Da się w bascomie zrobić to wszystko co Ci radzimy o rsie. Poczytaj o Config Serialin = Buffered i Bytematch All. Powinno się nieco rozjaśnić. Dodano po 5 Dodano po 45 A głównym problemem i tak pozostają zakłócenia, niezależnie czy zmienisz te przerwania czy nie. Więc tak, czy ta skretka idzie w pobliżu 230vac? Czy na każdej płytce masz elektrolity...
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)...
dostaję taką odpowiedź: al test com2 al test com2 al test com2 al test com2 al teraz ucina końcowe a :( może trzeba dać: Wait 1 S = ala Print S a jak się włącza bufor? Wystarczy go dać na odbiorowy AVR? Dodano po 10 w ten sposób ? Config Serialin = Buffered , Size = 20 Czy muszę dodawać jeszcze #2? A co zrobić ze zmienną integer? Będę miał wynik 4 cyfrowy...
na początek zobacz sobie jak wygląda ta ramka gdy przychodzi do zwykłego terminala w komputerze PC. prawdopodobnie na końcu tej ramki masz jeszcze znaki CRLF ale może się okazać że ich nie masz albo masz tylko CR wtedy trzeba przekonfigurować CONFIG INPUT aby reagowało na samo CR na końcu a jak nie ma ani CR ani CRLF to trza samemu kombinować właśnie...
bascom config serialin config serialin buffered przerwać serialin
głośnik grundig budowa pralki samsung xiaomi konto reset
zasilacz drukarka brother zasilacz drukarka brother
Passat B5 1.9 TDI – kontrolka poduszek po wymianie foteli, airbag, VAG, wiązka, kombi Zaniki dźwięku w organach cyfrowych Yamaha, Roland – diagnostyka zasilania, DSP, DAC