RS232 bzw cuau0 Probleme

Brusko

Well-Known Member
Hallo zusammen,
Ich bin dabei mir per Bascom einen Attiny2313 zu programmieren,
wo ich einen string per rs232 an den Attiny-Controler schick
Per Terminalprogramme (9600 8N1) über Windows funktioniert das auch aber
sobald ich dieses an meiner cuaXX dransetzte nicht mehr.
Im Controler wird die rs232 abgefragt weviel Bytes und welche vorhanden sind.
Wieviele es sind werden gezählt und die Anzahl wird mir angezeigt.
Bei Windows alles ok bei F-BSD habe ich immer mehr.
Wenn ich mit stty -f /dev/cuau0 mit die baudrate einzeigen lasse dann wird 9600 auch angeziegt.
Mus ich irgendwo nich mehr einstellen oder senden Freebsd irgendwie einen String vorher schon über die Schnittstelle ?
mfg Michael

also ich frage dann mit cat /dev/cuau0 ab
bei cu -l /dev/cuau0 geht es wieder

erstmal erledigt. ich muste den Controler auf crlf einstellen
 
Zuletzt bearbeitet:
Hallo,
es wäre doch wieder aktuel, komme da irgendwie nicht weiter,
anbei der code von Bascom. Wäre dankbar um ein Hinweis.

Code:
$regfile = "attiny4313.dat"                                ' Attiny4313 hat 4 Kb speicher
$baud = 9600
$crystal = 8000000                                          ' Quarz
$hwstack = 40
$swstack = 50
$framesize = 40

'$lib "mcsbyte.lbx"    ----HIER NICHT MOEGLICH----        'ergtibt einen schnelleren code aber NUR wenn Byte ausgeben werden sollen

Config 1wire = Portd.2                                      ' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von BASCOM durch Software realisiert
Config Portb.5 = Output                                    ' setze LED output --- Kontrolle das Main laeuft
Config Portb.6 = Output                                    ' setze LED output --- Sende LED
Config Portb.7 = Output                                    ' setze LED output --- Error LED
Config Input1 = Crlf , Echo = Lf                            ' cr noch nicht nehmen hängt sofort

echo off

Dim Ar(8) As Byte                                          ' Array für SerienNr.
Dim Scp(9) As Byte                                          ' Array für Scratchpack
Dim Step_one As Byte
Dim Eingabe As String * 11
Dim Temp As Integer                                        ' besteht aus 16 Bit und kann Ganzzahlen von -32768 bis +32767 enthalten
Dim T1 As Integer
Dim Celsius As Single                                      ' fuer die Kommastelle  (braucht viel Speicher)
Dim I As Byte                                              ' besteht aus 8 Bit und kann Ganzzahlen von 0 bis 255 enthalten
Dim W As Word                                              ' besteht aus 16 Bit und kann Ganzzahlen von 0 bis 65535 enthlten

On Urxc Onrxd                                              ' Unterprogramm für RS232 Empfang angeben mit dem name Onrxd
Enable Urxc                                                ' Interrupt URXC einschalten
Enable Interrupts                                          ' Interrupts global zulassen (allgemein)

Main:

Do
Print Len(eingabe)
If Len(eingabe) > 0 Then
  Print "im if"
  Select Case Eingabe
        Case "Test":
            Print "vor Gosub Test1"
            Gosub Test1
        Case "Test2":
            Gosub Test2
        Case "Temperatur"
            Print "vor gosub Temp"
            Gosub Read_sensor
        Case Else
            Print "Eingabe nicht erkannt"
            Eingabe = ""
  End Select
  Eingabe = ""
End If
Print "testzeile"
Toggle Portb.5                                            ' LED wechseln um verlauf programm zu sehen
Waitms 1000
Loop

Test1:
Print "geschaft_test1"
Eingabe = ""
Return

Test2:
Print "geschaft_Test2"
Eingabe = ""
Return

Onrxd:
Input Eingabe
Return

Read_sensor:                                                ' Unteroutine Read_sensor
Set Portb.6
1wreset                                                    ' Resete den !-wirebus
Waitms 1000
W = 1wirecount()                                          ' Anzahl der gefundener Sensoren
Waitms 500
Ar(1) = 1wsearchfirst()
Print "1-Wirebus"                                          ' suche den ersten Sensor und speicher in Ar(1)
If Err = 0 Then                                            ' Sensor vorhanden ? wenn ja dann ausfuehren
    Do
      Print Hex(ar(1)) ; "_";                              ' setzte erstes Feld ab...daran erkennt man welcher Fuehler 10=temperatur
      For I = 2 To 8
        Print Hex(ar(i));                                  ' Ausgabe der SerienNr.
        Next
        Gosub Messen
        Ar(1) = 1wsearchnext()                            ' Nach weiterem Gerät suchen
  Loop Until Err = 1                                      ' solange bis sich kein weiterer Sensor mehr meldet.
  Print "Anzahl=" ; W ; ";"                                ' Ender der Uebertragung mit Angabe der Stückzahl
  Print "beendet;"
End If
Reset Portb.6
Eingabe = ""
Return

Messen:
1wverify Ar(1)                                            ' Gerät mit der SerienNr. aus Ar() auswählen
If Err = 0 Then                                            ' Gerät vorhanden
    1wwrite &H44                                            ' Temperaturmessung anstoßen
    Waitms 1000                                            ' warten bis Messung fertig
    1wverify Ar(1)                                          ' Gerät mit der SerienNr. aus Ar() auswählen
    1wwrite &HBE                                            ' Temperatur auslesen
    Scp(1) = 1wread(9)                                      ' Daten in ein Array lesen (sp1 Temperatur / sp2 ob plus oder minus)
    Temp = Makeint(scp(1) , Scp(2))                        ' Berechung auf eine Kommastelle in 0.1 schritten
    Temp = Temp * 50                                        '              "                  "
    Temp = Temp - 25                                        '              "                  "
    T1 = Scp(8) - Scp(7)                                    '              "                  "
    T1 = T1 * 100                                          '              "                  "
    T1 = T1 / Scp(8)                                        '              "                  "
    Temp = Temp + T1                                        '              "                  "
    Temp = Temp / 10                                        ' Kuerze um eine Stelle
    Celsius = Temp / 10                                    ' Setze Kommastelle
    Print "=" ; Fusing(celsius , "##.#") ; ";"              ' Druck temperatur
Else
    Gosub Error                                            ' Error wenn Geraet nicht gelesen werden kann
End If
Wait 1
Return

Error:
Set Portb.7
Print "error"
Wait 1
Reset Portb.7
Return
 
Weil cat keine Ahnung von seriellen Schnittstellen hat. Das verschluckt sich halt an stop und parity bits.
 
ach so,
mich hatte es blos gewundert wenn das Programm auf dem Controler läuft und die ganze zeit "testzeile" druck, konnte ich dieses mit Cat lesen
aber sobald eine Eingabe erfolge blieb es stehen.
Ok danke Kamikaze , dann mus ich mir mal durchlesen wie man in C++ die schnittstelle öffnet und mit arbeitet *g*
Mfg Michael
 
Zurück
Oben