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

[Bascom] _rs_bufcountr0 - dziwna sprawa?

robiw 27 Lis 2008 16:15 1454 8
REKLAMA
  • #1 5789858
    robiw
    Poziom 26  
    Witaj,
    Używam programowej obsługi wejściowego bufora FIFO USARTa zaimplementowanego w Bascomie oraz następującej konstrukcji do jego obsługi umieszczonej w głównej pętli programu:

    
    'Konfigurujemy programowy bufor sprzętowy
    Config Serialin = Buffered , Size = 128
    Enable Interrupts
    
    .........
    'W pętli głównej:
    
    If _rs_bufcountr0 <> 0 Then
    
     Do
        Dana = Inkey()       'Wczytujemy bajt z programowego bufora FIFO
        'Tutaj wykonuję jakies działania na odczytanej danej
     Loop Until _rs_bufcountr0 = 0
    
    End if
    


    Wszystko działa fajnie tyle, że przy włączaniu urządzenia zmienna _rs_bufcountr0 (wskaźnik liczby bajtów w programowym buforze danych - wewn. zmienna Bascoma) potrafi być <>0 niewiadomo dlaczego. Podobnie jest (czasami) gdy zmieniam prędkość transmisji korzystając z instrukcji Baud. Dodam, iż nie przesyłam w tym czasie danych do procka (ma podłączony FT232 do wejść USARTa)... Dziwna sprawa - macie jakiś pomysł? A może zmienna nie jest zerowana przy starcie co byłoby dziwne i wyklucza jej zmianę przy zmianie prędkości transmisji czyli operowania wyłącznie na rejestrach konfiguracyjnych... robiw
  • REKLAMA
  • #2 5789946
    dawid512
    Poziom 32  
    A może lepiej sam przypisz jej 0 jeszcze przed pętlą. Nieodpowiednia prędkość może wysyłać "śmieci" do UARTA. Najlepiej jest jeżeli masz zew. kwarc.
  • REKLAMA
  • #3 5789995
    robiw
    Poziom 26  
    Witaj,
    Tyle, że ja nic nie wysyłam do USARTa więc skąd śmieci. Procek to Atmega16. Przyznam, że nie chciało mi sie pisać obsługi przerwania do odbioru tych znaków bo ten FIFO działa OK. Do programowego czyszczenia bufora jest bodajże funkcja Clear Buffer - tyle, że skąd tam się biorą dane? Prędkość to 38400. Kwarc 12MHz. dodatkowo multipleksuję wejścia na FT232 lub MAX232 ale samo przełączanie nie może wygenerować pełnego bajta przecie w USARCie... robiw
  • REKLAMA
  • #4 5790073
    dawid512
    Poziom 32  
    Właśnie te zmiany prędkości mogą dawać śmieci. Zobacz jak wygląda sprawa jeśli korzystasz z jednej prędkości.
  • REKLAMA
  • #5 5790512
    robiw
    Poziom 26  
    Witaj,
    To nie tłumaczy <>0 przy włączeniu układu... robiw
  • #6 5791300
    zumek
    Poziom 39  
    robiw napisał:
    ... ale samo przełączanie nie może wygenerować pełnego bajta przecie w USARCie... robiw

    Jedno właściwe zbocze na RX, a USART sobie resztę dopowie.
    Chyba że Twój USART, pracuje w trybie synchronicznym :?:
  • #7 5791372
    robiw
    Poziom 26  
    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 4052... robiw

    PS.
    Lub użyję Ischarwaiting()
  • #8 5791409
    zumek
    Poziom 39  
    Przed przełączeniem wejść, wyłącz przerwania RX, a po przełączeniu poczekaj przez czas potrzebny na transmisję 1 bajtu, skasuj flagę przerwania RX i włącz - może pomoże ;)
    Albo przed skasowaniem flagi, sprawdź czy się ustawiła.
  • #9 5799799
    robiw
    Poziom 26  
    Witam,
    Problem rozwiązany a winny był sprzęt znaczy się autor ;-). Dodam, że wyłączanie przerwań w czasie przełączeń jak i użycie Ischarwaiting oraz czyszczenie bufora nie pomagało. Ten bajt, który przychodził po RX zawsze równy był 0x00. Problem był taki, iż RX przełączony na RSa był sprzętowo podciągnięty rezystorem do zasilania (taki układ) a przy przełączaniu na FT232 nie był podciągnięty nigdzie (FT ma chyba stan wysokiej impedancji jeśli nic nie idzie po USB) i ta "subtelna" zmiana powodowała, że przełączenie multipleksera 4053 na FT'ka powodowała generację przerwania RX i "dopowiedzenie" sobie reszty przez USARTa tak by mu wyszło zero w buforze ;-). Swoją drogą zastanawiam się czy to nie niedoróbka. Także Zumek jak zwykle miał rację co do USARTa ;-). Wejście RX procka podciągnąłem do zasilania przez rezystor 4K7 (można było wyjście RX FT232 ale tak jest jeszcze bezpieczniej jeśli chodzi o przełączanie) i USART już nie marudzi. Dziękuję wszystkim i pozdrawiam... robiw
REKLAMA