- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 9 von 9

Thema: [gelöst] Über RS-232 Bit im Atmega32 setzen/rücksetzen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.10.2009
    Ort
    Jena
    Alter
    41
    Beiträge
    16

    [gelöst] Über RS-232 Bit im Atmega32 setzen/rücksetzen

    Anzeige

    E-Bike
    Hallo Jungs, ich brauch mal wieder eure Hilfe...

    Und zwar möchte ich mit einem Terminalprogramm, über RS-232 ein Bit im Controller setzten bzw. rücksetzen.

    Hier erstmal der Code:
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000                                         
    
    $baud = 9600
    
    $hwstack = 32
    $framesize = 32
    $swstack = 32
    
    
    Dim Stehen As Byte
    Stehen.0 = 0
    
    Do
    
    Dim A As Integer , B As Integer
       A = 0
       B = 0
    
       A = Ischarwaiting()
    
       If A = 1 Then
            B = Inkey()
            Print "Inkey: " ; B
            Select Case B
                Case 48 : Stehen.0 = 0
    
                Case 49 : Stehen.0 = 1
    
            End Select
    
    End If
    
       If Stehen.0 = 1 Then
          Call ... 'Sub welches dann gestartet werden soll
       End If
    
    Loop
    Wie gesagt, zuerst wird das Byte deklariert und auch gleich gesetzt (hatte es auch schon mit dem SET Befehl im Bascom versucht).
    Je nachdem, welcher CHAR nun im Puffer des UART abgelegt wird, sollte nun die Routine gestartet werden oder nicht.

    Wie es auch nicht anders zu erwarten ist, Funktioniert der Code so nicht und meine Erfahrungen in der Richtung sind eher Dünn gesät. Ich vermute, das irgendwas in der Kommunikation zwischen PC und UART nicht passt. Terminal Programm läuft und auch das Flaschen mittels Bootloader geht, PRINT Befehle kommen auch an.

    Deshalb meine Frage an euch, wie man es zum Laufen bringen könnte, bzw. was falsch ist.

    Danke für eure Hilfe!

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Was sendest Du denn vom Terminal aus? 0 oder 1 werden ja
    nicht als Hex 00 bzw Hex 01 gesendet sondern als ASCII und
    darauf sollte Case dann auch prüfen.

    Gruß Richard

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    09.10.2009
    Ort
    Jena
    Alter
    41
    Beiträge
    16
    Richtig, sende 0 und 1. Was als ASCII 48 bzw. 49 kommt, doch auch wenn CASE darauf überprüft geht´s nicht.

    Die Variable A (Ischarwaiting) wird nicht 1.

    Danke für den Versuch...

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    serial in buffered wird klemmen, weil das rxc-interrupt genutz wird
    und daher auch das rxc-flag resettet wird, daher kein ischarwaiting
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    45
    Beiträge
    642
    Ich lese Daten vom PC immer mit dem Inkey Befehl ein, daher würde ich das ischrwaiting durch Inkey ersetzen das hat bei mir immer hingehauen.

    A= Inkey ()

    If A = 49 Then....
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    09.10.2009
    Ort
    Jena
    Alter
    41
    Beiträge
    16
    Danke vitis und der Rest...

    Hab SERIALIN auskommentiert und die CASE Abfrage auf die ASCII Werte 48 (0) bzw. 49 (1) geändert und es funktioniert.

    Wird kein Puffer benötigt, wenn man nur ein Zeichen ausliest?


    MfG Befedo und ein frohes Fest euch allen!

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.12.2008
    Ort
    Köln
    Beiträge
    460
    hi
    könntest du den funktionierenden code posten?

    MFG
    Dominik

    P.S.: Ein frohes Fest euch allen

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    nein, der Buffer wird für ein Zeichen nicht benötigt, weil
    der AVR einen Buffer von einem Zeichen schon
    harwaremäßig dabei hat, nämlich das UDR-Register.
    Da passt genau ein Byte rein.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    09.10.2009
    Ort
    Jena
    Alter
    41
    Beiträge
    16
    @Dominik009

    Hab den Code im ersten Beitrag editiert, das ist der der läuft.
    Wie gesagt, das Byte heist STEHEN und die CASE Anweisung überprüft ob 0 oder 1 (ASCII 48 bzw. 49) als INKEY empfangen wurde.

    MfG Befedo

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress