PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rs 232 Relaisplatine ansteuern, nur wie?



@rave
28.12.2007, 15:14
Hallo,

habe mir vor ein paar Jahren diese Relaisplatine
http://www.produktinfo.conrad.com/datenblaetter/950000-974999/967720-an-01-de-Relaisplatine_8fach_seriell.pdf
gekauft. Wollte Sie ursprünglich auch nur am PC betreiben, was ja auch wunderbar funktionierte.
So, da ich mitlerweile auch mit Mikrocontrollern "bastle" würde ich die gern den Mikrocontroller RS232 Schnittstelle ansteuern. Nur wie ist die Frage! Für einen Ansatz in Bascom - Basic wäre ich sehr Dankbar!

Robotniks
28.12.2007, 15:17
Hi,

schau mal hier:

http://www.c-control.de/c-control-pro/applikationen/8fach_relaisplatine_seriell.html

ist zwar für die C-Control Pro aber könnte man ja auch für Bascom umschreiben.

@rave
28.12.2007, 17:00
Danke für die schnelle Antwort, komme allerdings nicht wirklich weiter. Kann ich einfach die bytes per Print senden? und wie krieg ich die Prüfsumme hin?
in Qbasic wird das mit zwei XOR's gemacht:
outbuf(3) = outbuf(0) XOR outbuf(1) XOR outbuf(2)
das will aber Bascom so nicht akzeptieren.
Gruß

stefan_Z
28.12.2007, 18:59
Also nen AVR an RS232 ist kein Problem.
du brauchst allerdings einen Pegelwandler wie z.B. den MAX232 um die AVR UART auf RS232 zu bringen. Das ist aber einfach und schnell gemacht, kostet quasi nix.
Daten Senden machst du mit PRINT, empfangen mit INPUT.

Bascom kann nur eine Operation pro Zeile ausführen:
x = y + z geht super
x = y + z + a geht nicht.
Muss man auflösen in:
x = y + z
x = x + a

@rave
29.12.2007, 12:57
Danke! Das hilft mir schonmal. RS232 ist kein Problem, stimmt wohl mache das mit RN-Control!

@rave
03.01.2008, 11:59
Hallo,
bräuchte nochmal eure Hilfe:
Ich bekomme bei folgendem Code immer Fehlermeldungen, was muss ich also ändern, damit Bascom die ankommenden Bytes in die Variable mit Index schreibt!

Sub Getframe
Do
Bz = Bz + 1
Input = Inbuf(bz)
Waitms 100
Loop Until Bz < 4
Checkframe
End Sub

der Orginalcode:

Sub GetFrame()

LCD_ClearLCD()
Zeile1 = "READ "
LCD_Locate(1,1) : LCD_WriteText(Zeile1)

Do
BZ = BZ + 1
InBuf(BZ) = Serial_ReadExt(0)
LCD_Locate(2,1) : LCD_WriteWord(BZ,1)
LCD_Locate(2,4) : LCD_WriteWord(InBuf(BZ),3)
AbsDelay(1000)
Loop While BZ < 4

CheckFrame()

End Sub

Vielen Dank schonmal!

@rave
03.01.2008, 16:19
Ich habs jetzt:
Vielleicht nicht die eleganteste Lösung aber es Funktioniert! (zumindest halbwegs!)


'Test programm für die Conrad RS232 Relaisplatine Best. Nr.: 967720


$regfile = "m32def.dat" 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32
$framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen
$swstack = 32 'wirklich nötig werden
$hwstack = 32
$crystal = 16000000 'Die Frequenz des verwendeten Quarzes

$baud = 19200 'Die Baudrate für RS232 Ausgabe.
Dim A As Byte ' die Ausgabe Bytes definieren
Dim B As Byte 'A ist der Erste Befehl:
Dim C As Byte '1 = Platine Initialisieren, 2 = Schaltzustände abfragen,
Dim D As Byte '3 = Relais schalten, 4 = Option abfragen,
Dim I As Integer '5 = Option setzten (Brodcast(an alle Platinen)
'die Relaisplatine initialisieren 'B = Platinenadresse (1...256)
A = 1 'C = Relaisadressse:
B = 1 '1= Rel1; 2= Rel2; 4= Rel3; 8=Rel4 usw.
C = 0 'D = Prüfsumme = A Xor B Xor C
D = A Xor B
D = C Xor D
Print Chr(a) ; Chr(b) ; Chr(c) ; Chr(d)
Wait 1
'sämtliche Kombinationen durchschalten
Start1:

A = 3
I = 0
I = I + 1
C = I
D = A Xor B
D = C Xor D
Print Chr(a) ; Chr(b) ; Chr(c) ; Chr(d)
Wait 1
Do
I = I + 1
C = I
D = A Xor B
D = C Xor D
Print Chr(a) ; Chr(b) ; Chr(c) ; Chr(d)
Wait 1
Loop Until I = 256

Goto Start1


Gruß Florian

merlin63
24.03.2008, 21:00
hallo florian

benutze doch die suche....da findest du doch bestimmt genug beispiele für die benutzung der rs232 und der pegelwandler gehört ja schon fast zur standart applikation.

also viel glück
gruß thomas

stefan_Z
25.03.2008, 15:34
und wieso habt ihr beiden das selbe Avatar?? :-P
Den MAX232 gibts auch als fertiges Pegelwandlermodul bei Pollin - in der Anleitung is auch der Plan drin - kann man gut klauen ;-)