PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Software UART Problem



TobiasBlome
27.05.2009, 20:53
Hallo,
ich möchte Daten an software UART senden(Software UART, weil ich 3 RS232 Schnittstellen nutze).

Ich habe aus einem alten Programm einen Softwareteil kopiert und weiß nun nicht, wie ich die Schnittstelle anpassen muss...

es geht um:

"...Output As #3 und 4" das ich benutzen möchte - ich denke da habe ich keine Fehler gemacht ABER

wie muss ich das folgende ändern:
Open "com1:" For Binary As #1 -> wird das dann com3?...#3?

UND den Putbefehl:
Put #1 , 0 -> statt #1 dann #3?


vielen Dank, Tobias




'-------------------------------------------------------------------------------
'Software RS232 für US-Sensor
Open "COMB.1:9600,8,N,2" For Output As #1 'Port PB1 wird als TX definiert
Open "COMB.2:9600,8,N,2" For Input As #2 'Port PB2 wird als RX definiert

'-------------------------------------------------------------------------------
'Software RS232 für USB
Open "COMB.0:9600,8,N,2" For Output As #3 'Port PB0 wird als TX definiert
Open "COMD.6:9600,8,N,2" For Input As #4 'Port PD6 wird als RX definiert

'-------------------------------------------------------------------------------
'USB Confi!!!!

Echo Off '///für USB-Stick
Open "com1:" For Binary As #1 '///für USB-Stick
'...

'_________________________________________________ ______________________________
Usb_schreiben:

Print #3 , "OPW Log.txt" + Chr(13); 'Datei Log.txt öffnen
Input #4 , Datensatz

Datensatz = Date$ + Chr(9) + Time$ + Chr(9) + Str(entfernung) + Chr(9) + "cm" + Chr(9) + Str(liter) + Chr(9) + "Liter" + Chr(13) + Chr(10)
L = Len(datensatz) 'gibt die Länge von String "Datensatz" wieder
Print #3 , "WRF "; 'Befehl um in die geöffnete Datei zu schreiben
Put #1 , 0
Put #1 , 0
Put #1 , 0
Put #1 , L 'L ist die Länge vom String S
Put #1 , 13
Print #3 , Datensatz ;
Input #4 , Datensatz


Print "CLF log.txt" + Chr(13); 'Datei log.txt schließen
Input Datensatz

Return

TobiasBlome
27.05.2009, 20:57
und hier noch das original Programm, aus welchem ich den Teil kopiert habe....



'Konfiguration µC:
$regfile = "m32def.dat" 'AT-Mega32
$crystal = 14745600 'Quarz: 14,7456 MHz
$baud = 9600 'Baudrate definieren

'-------------------------------------------------------------------------------


'-------------------------------------------------------------------------------
Open "com1:" For Binary As #1

Dim Samples As Word
Dim Delayms As Word
Dim Channels As Word
Dim N As Integer
Dim I As Integer
Dim L As Integer
Dim S As String * 20
Dim Ad As Integer

Config Portb = Output
Config Adc = Single , Prescaler = Auto , Reference = Off
Start Adc
Echo Off

Do
Input S
Loop Until S = "D:\>" 'USB Controller abfragen, bis D:\> gesendet wird
Portb.0 = 1 'schreib-LED einschalten
Waitms 1000
Print "rd todo.txt" + Chr(13); 'todo.txt Datei LESEN
Input Samples 'Werte aus Datei übernehmen
Get #1 , L
Input Delayms
Get #1 , L
Input Channels
Get #1 , L
Input S
Print "OPW Log.txt" + Chr(13); 'Datei Log.txt öffnen
Input S
For N = 1 To Samples 'Anzahl Messungen
S = ""
For I = 1 To Channels 'Kanäle 1-8 MAX 'geändert
Ad = Getadc(i)
S = S + Str(ad)
If I < Channels Then S = S + Chr(9)
Next I
S = S + Chr(13) + Chr(10)
L = Len(s) 'gibt die Länge von String "S" wieder
Print "WRF ";
Put #1 , 0
Put #1 , 0
Put #1 , 0
Put #1 , L 'L ist die Länge vom String S
Put #1 , 13
Print S ;
Input S
Waitms Delayms 'Wartezeit zwischen den Messungen
Next N
Print "CLF log.txt" + Chr(13); 'Datei log.txt schließen
Input S
Portb.0 = 0 'schreib-LED ausschalten
End

maximum2006
27.05.2009, 23:10
also um den software uart port zustarten nutze ich folgendes erfolgreich:


Open "coma.0:9600,8,n,1" For Input As #1

pin = a.0 !! kannst hier natürlich auch comc.4 schreiben zb.
Input: also eingang -> receive!

ansonsten als ausgang "For Output" schreiben!

gruß max

TobiasBlome
28.05.2009, 17:33
also um den software uart port zustarten nutze ich folgendes erfolgreich:


Open "coma.0:9600,8,n,1" For Input As #1


naja das mach ich doch:
Open "COMD.6:9600,8,N,2" For Input As #4

aber in dem alten Programm wurde die Hardware RS232 genutzt und ich verstehe den Zusatz nicht:
Open "com1:" For Binary As #1

wofür steht es und wie muss ich das ändern, wenn ich es ändern muss?

und was machen die PUT anweisungen?
Put #1 , 0

Tobias

maximum2006
28.05.2009, 18:03
du kannst beim software uart kein BINARY nutzen nehm input/output


You can use BINARY or RANDOM for COM1 and COM2, but for the software UART pins, you must specify INPUT or OUTPUT.

schreib:


Open "com1:" For Input/Output As #1

TobiasBlome
31.05.2009, 20:41
so es läuft fast...

leider kommt beim ersten Start immer eine Fehlermeldung:
Bad Command<\r>

Das Problem ist das der µC aus irgendeinem Grund eine 0 beim ersten mal sendet:

<\0>OPW LOG.txt<\r> -> DAS IST FALSCH

OPW LOG.txt<\r> -> SO SOLLTE ES SEIN



Usb_schreiben:
'Portb.0 = 1 'schreib LED ein
Print #3 , "OPW LOG.txt" + Chr(13); 'Datei Log.txt öffnen
Input #4 , Datensatz

Datensatz = Date$ + Chr(9) + Time$ + Chr(9) + Str(entfernung) + Chr(9) + "cm" + Chr(9) + Str(liter) + Chr(9) + "Liter" + Chr(13) + Chr(10)

L = Len(datensatz) 'gibt die Länge von String "Datensatz" wieder
Print #3 , "WRF "; 'Befehl um in die geöffnete Datei zu schreiben
Put #3 , 0
Put #3 , 0
Put #3 , 0
Put #3 , L 'L ist die Länge vom String Datensatz
Put #3 , 13 '13 ist das abschlusszeichen also wie Chr 13
Print #3 , Datensatz ;
Input #4 , Datensatz


Print #3 ,"CLF log.txt" + Chr(13); 'Datei log.txt schließen
Input #4 , Datensatz
'Portb.0 = 0 'schreib LED aus

Return


ist da etwas in irgend einem Speicher oder so?!


Tobias