Hallo Burki,
werde mal die Schaltung, wie in meinen vorherige Beitrag gezeichnet habe, aufbauen und anschließend ein Listing dazu schreiben.
Damit ich auch sehe, ob es funktioniert...
8-[
Weiß aber nicht, ob ich heute noch dazu komme.
Druckbare Version
Hallo Burki,
werde mal die Schaltung, wie in meinen vorherige Beitrag gezeichnet habe, aufbauen und anschließend ein Listing dazu schreiben.
Damit ich auch sehe, ob es funktioniert...
8-[
Weiß aber nicht, ob ich heute noch dazu komme.
Danke Silivio - es muss nicht heut oder morgen sein bin da flexibel und nicht unter Druck - siehst eh, man muss immer probieren und viel denken aber da bist du mir schon um ein paar Galaxien voraus - vielleicht machts bei mir auch mal klick bin immer am lesen und studieren wenn ich mal ne freie minute hab - hast Du die ICs schon ? für Lichtschranke - stehe zu meinem Angebot wenn Du die brauchen kannst - damit muss ich mich dann auch noch beschäftigen - hi --- freu mich schon bis Deine Tests und Info hi- also bis dann gruß Burki
Hallo Burki,
habe schnell was in den Editor getippt....
Leider nicht testen können
8-[
edit:
so funktioniert es bei mir
mit Interrupt schaut es etwas kompliziert aus...
Schicks mal durch den Bascom-Compiler...Code:'******************************************************************************
'Abfrage der Eingänge Port3 und Port4 am RNBFRA-Board, wenn Interrupt Int2 durch Eingang ausgelöst wird
'Powerport wird auf High geschalten, wenn Port3(Taste1) betätigt
'Powerport wird auf Low geschalten, wenn Port4(Taste2) betätigt
'Unterprogramme(Relais_on/ off schalten Power-Port
$regfile = "m32def.dat"
$baud = 9600
$crystal = 8000000 'Quarzfrequenz
Config Scl = Portc.0 'Ports fuer I2C-Bus
Config Sda = Portc.1
Config Pinb.2 = Input 'Interrupt Int2 (Pinb.2 als Eingang)
Portb.2 = 1 'PullIp ein (Potential am Pin ist High)
'Eingangs-Port
Const Writeeingabeport_adr = &H7E 'I2C Adr PCF 2 (Schreibadresse)
Const Readeingabeport_adr = &H7F 'I2C Adr PCF 2 (Leseadresse)
'Power-Port
Const Writepowerport_adr = &H72 'I2C Adr PCF 1 (Schreibadresse)
Const Readpowerport_adr = &H73 'I2C Adr PCF 1 (Leseadresse)
Dim I2cdaten As Byte 'Datenbyte aus PCF8574
Dim Taste1 As Byte 'Taste 1 (Eingangsport-Port3)
Dim Taste2 As Byte 'Taste 2 (Eingangsport-Port4)
Dim V As Byte 'Variable wird nur für Ausgabe benötigt
Dim Flag As Bit
I2cinit 'I2C Initialisieren
I2cstart 'I2C START
I2cwbyte &H74 'Schreibbefehl an PCF3 schicken
'Led´s ein ,Motorendstufen ein, Port-Peripherie ein, RBN-Bus Sleep Modus aus (also Peripherie aktiv)
I2cwbyte &B00000010 'Datenbyte an PCF3
I2cstop 'I2C STOP
Config Int2 = Falling
Enable Int2
Enable Interrupts
On Int2 Int2_isr
Portd.6 = 0 'Schrittmotoren erst mal ausschalten
I2cdaten = 0 'Variablen auf definierte Zustände setzen
Flag = 0
V = 0
Taste1 = 247 '247 entspricht Port3
Taste2 = 251 '251 entspricht Port4
'******************** Hauptprogramm ********************************************
Do
If Flag = 1 Then Gosub Relais_on 'Ist Flag=1 dann Unterprogramm "Relais_on"
If Flag = 0 Then Gosub Relais_off 'Ist Flag=0 dann Unterprogramm "Relais_off"
Waitms 200
Loop
'********************* Unterprogramme ******************************************
Relais_on:
I2cstart 'I2C START
I2cwbyte Writepowerport_adr 'Schreibbefehl an PCF1 schicken
I2cwbyte &B11111111 'Datenbyte an PCF1 -> PowerPort 5 einschalten
'binäre Darstellung, Port 6 auf High geschaltet
I2cstop 'I2C STOP
Return 'Rücksprung
Relais_off:
I2cstart 'I2C START
I2cwbyte Writepowerport_adr 'Schreibbefehl an PCF1 schicken
I2cwbyte &B00000000 'Datenbyte an PCF1 -> PowerPort 5 ausschalten
'binäre Darstellung, wenn Ports 1-8 auf Low geschaltet
I2cstop 'I2C STOP
Return 'Rücksprung
Int2_isr:
Disable Int2 'Interrupt Int2 ausschalten
I2cstart 'I2C START
I2cwbyte Readeingabeport_adr 'Lesebefehl an PCF schicken
I2crbyte I2cdaten , Nack 'Datenbyte von PCF lesen, lese letztes Byte
I2cstop 'I2C STOP
V = I2cdaten 'Datenübergabe an Variable V
If I2cdaten = Taste1 Then Flag = 1 'Auswertung von Eingangsdaten(I2cdaten) und setzen von Flag
If I2cdaten = Taste2 Then Flag = 0
If V = 247 Then
Print "letzter Eingangswert= " ; V ; " Relais= On " 'Vergleich-> ist V =247 dann geben an RS232 Werte aus
Print " " 'Leerzeile
Incr V 'Erhöhe V um 1, damit Anfangsbedingung nicht mehr erfüllt(sonst permanente Ausgabe)
End If
If V = 251 Then
Print "letzter Eingangswert= " ; V ; " Relais= Off " 'Vergleich-> ist V =251 dann geben an RS232 Werte aus
Print " " 'Leerzeile
Incr V 'Erhöhe V um 1, damit Anfangsbedingung nicht mehr erfüllt(sonst permanente Ausgabe)
End If
Enable Int2 'Interrupt Int2 einschalten
Return 'Rücksprung
Hallo Burki,
hab es noch einmal ganz einfach zusammen geschrieben.
Das erste Listing war einfach nur aus Codeschnipsel zusammenkopiert.
Schau es Dir mal an!
Sieht doch etwas übersichtlicher aus. O:)Code:'******************************************************************************
$regfile = "m32def.dat"
$baud = 9600
$crystal = 8000000 'Quarzfrequenz
Config Scl = Portc.0 'Ports fuer I2C-Bus
Config Sda = Portc.1
'Eingänge
Const Writeeingabeport_adr = &H7E 'I2C Adr PCF 2
Const Readeingabeport_adr = &H7F 'I2C Adr PCF 2
'Power-Port
Const Writepowerport_adr = &H72 'I2C Adr PCF 1
Const Readpowerport_adr = &H73 'I2C Adr PCF 1
Dim I2cdaten As Byte 'Datenbyte aus PCF8574
Dim Taste1 As Byte 'Größe für Variable festlegen
Dim Taste2 As Byte 'Größe für Variable festlegen
I2cinit
I2cstart
I2cwbyte &H74 'Schreibbefehl an PCF3 schicken
'Led´s ein ,Motorendstufen ein, Port-Peripherie ein, RBN-Bus Sleep Modus aus (also Peripherie aktiv)
I2cwbyte &B00000010 'Datenbyte an PCF3
I2cstop
Portd.6 = 0 'Schrittmotoren erst mal ausschalten(vorsichtshalber :-) )
Taste1 = 247 'Taste 1 (Eingangsport-Port3) Variable für den Eingang
Taste2 = 251 'Taste 2 (Eingangsport-Port4) Variable für den Eingang
'******************** Hauptprogramm ********************************************
Do
I2cstart
I2cwbyte Readeingabeport_adr 'Lesebefehl an PCF schicken
I2crbyte I2cdaten , Nack 'Datenbyte von PCF lesen
I2cstop 'I2C STOP
If I2cdaten = Taste1 Then Goto Relais_on 'Vergleich-> ist Taste1 dann gehe zu Unterprogramm Relais_on
If I2cdaten = Taste2 Then Goto Relais_off 'Vergleich-> ist Taste2 dann gehe zu Unterprogramm Relais_off
Loop
'********************* Unterprogramme ******************************************
Relais_on:
I2cinit 'I2C Initilisieren
I2cstart 'I2C START
I2cwbyte Writepowerport_adr 'Schreibbefehl an PCF1 schicken
I2cwbyte &B00100000 'Datenbyte an PCF1 -> PowerPort 6 einschalten
'binäre Darstellung, Port 6 auf High geschaltet
I2cstop 'I2C STOP
Return 'Rücksprung in Hauptprogramm
Relais_off:
I2cinit 'I2C Initilisieren
I2cstart 'I2C START
I2cwbyte Writepowerport_adr 'Schreibbefehl an PCF1 schicken
I2cwbyte &B00000000 'Datenbyte an PCF1 -> PowerPort ausschalten
'binäre Darstellung, wenn Ports 1-8 auf Low geschaltet
I2cstop 'I2C STOP
Return 'Rücksprung in Hauptprogramm
Beim RNBFRA-Board mußt man bei den Eingängen und Ausgängen alles über I2C-Routinen machen.
Aber wenn man mal das Ganze vereinfacht anschaut, fragt man in der Hauptschleife die Eingänge ab, vergleicht sie und stößt ein Unterprogamm an.
Nach dem Abarbeiten des Unterprogrammes, erfolgt ein Rücksprung in die Hauptschleife.
Hallo Silvio - Danke für Deine Mühe - bin die nächsten Tage geschäftlich unterwegs und bin die n. 10 Tage voll belegt - werde erst danach dazukommen es zu probieren - ist Super da sollte ich dann schon etwas weiter kommen - die liebe Zeit aber ja irgendwann wurde auch Rom erbaut hi
Burki
Hallo Silvio
entschuldige dass ich mich erst jetzt wieder melde - wir haben zur Zeit schwere gesundheitliche Probleme in der Familie (Eltern + Schwiegeretlern) weswegen ich die nächste Zeit passen muss und nur sporadisch oder Stundenweise dazukomme. Ich wollte das nur kurz mitteilen nicht dass Du mich für unhöflich hälst - es wäre schön wenn Du mir da es ja nicht eilt und Du mit deinem Projekt ja vielleicht weiterkommst ein Info das mir mal weiterhelfen könnte schickst - danke im voraus - möchte hier das Forum nicht missbrauchen - also meld mich dann mal wieder oder wenn Du was neues hast was ich ev. verwenden oder als weiterhilfe brauchen könnte. Danke.
liebe grüße Burki :(