logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Odczyt tylko dwóch bajtów z bufora UART w ATXMEGA32A4AU wysyłając pięć znaków

grafii1 06 Gru 2021 10:54 417 8
REKLAMA
  • #1 19747541
    grafii1
    Poziom 17  
    Witam , problem polega na odczytywaniu tylko 2 bajtów z bufora uart , wysyłając 5 zaków np.12345 na wyświetlaczu pojawią się tylko 12 a reszty po prostu nie ma . Czy ktoś napotkał podobny problem ...
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 19747546
    jarekgol
    Poziom 38  
    grafii1 napisał:
    Locate 1 , 1 : Lcd Comm
     Locate 2 , 1 : Lcd L1

    nie znam tego języka, ale wygląda na to że nadpisujesz sobie wyświetlacz na drugiej pozycji jakimś licznikiem.
  • REKLAMA
  • #3 19747580
    grafii1
    Poziom 17  
    Tak ale tylko dlatego żebym wiedział czy w ogóle układ odczytuje bufor poza tym są osobne linijki na wyświetlaczu więc tam nic się nie nadpisuje pierwsze linijce jest odczyt z bufora drugiej stan przebiegu licznika
  • REKLAMA
  • #4 19747600
    bart-projects
    Poziom 29  
    Wątpię by dożył tego że go nadpisze. W kodzie jest Wait 1 więc to licznik sekund. Na szesnastoznakowym zmieści 9999999999999999s a to podzielone przez 3600 dla każdej godziny i 24 dla każdej doby daje 115 740 740 740,7407 dni :D

    Program jest kiepsko napisany.

    @grafii1

    Może uC reaguje na pierwszy znak i ledwo zdąży nadejść drugi a trzeciego jeszcze nie ma i spełniony jest warunek Buf = Ischarwaiting(#3) równe zero.
    Lepiej zareaguj na jakiś koniec transmisji typu Enter lub LineFeed albo timeout jak w Modbus. Wtedy to sobie wyświetl a nie w kółko Cls i Wait 1
  • REKLAMA
  • #5 19747677
    grafii1
    Poziom 17  
    pakiety wysyłane są co 400ms więc na w buforze powinno być około 10 lub więcej bajtów , z pominięciem case wyświetla się dodatkowy znak ale nie więcej niż 3 łącznie , poza tym w pętli do - loop until (do testów) dopisałem zmienną która zlicza znaki w tej pętli i wychodzi max 3 ...
    ps.może toporny lecz tylko do testów
    zaponiałem dodać że gdy wstawie opóźnienie 100ms zaraz po If Ischarwaiting(#3) > 0 Then to też nic nie daje...
  • #7 19747722
    grafii1
    Poziom 17  
    przetestowałem od seliain1 do serialin4 i tylko na serialin2 brak jakichkolwiek znaków
  • #8 19747736
    bart-projects
    Poziom 29  
    Bo reszta pinów jest nieskonfigurowana i łapie śmieci z powietrza. Rozumiem, że działasz na Portd.3 i Portd.2

    Gdybyś czytał Helpa do Bascom ....
    Cytat:
    For the XMEGA, if you set the priority with CONFIG PRIORITY, you must enable the MED priority.


    Czy to Tobie coś mówi? :D

    Przedobrzyłeś. Xmega ma trzy różne priorytety przerwań. Bascom sam włącza te potrzebne, ale jak ktoś się uprze i chce nimi zarządzać sam to musi wiedzieć co robi.
    Zakomentuj Config Priority albo dopisz "Med = Enabled"
  • #9 19747769
    grafii1
    Poziom 17  
    Przyznaje się do błędu , nie doczytałem ... , po wyłączeniu tej że linii i serialin2 = COM3 normalny odczyt z bufora ...
    Dzięki za podpowiedź
REKLAMA