wäre super.
Danke Dir schon mal.
Silvio
wäre super.
Danke Dir schon mal.
Silvio
so sorry, hab das ganz vergessen, ahb viel zu tun ^^ schule, ähnliches
aber hier der code:
bitte, sollte so funzen, jedes mal wenn der int vom pcf kommt, lies die taste einCode:'################################################### 'Testprogramm 6 'für 'RoboterNetz Standard-Roboter Board RBNFRA 1.2 ' 'Aufgabe: 'Testet Eingangsport indem Wert über RS232 'übermittelt wird (9600 Baud einstellen) ' 'Autor: Frank 'Weitere Beispiele und Beschreibung der Hardware 'unter http://www.Roboternetz.de '################################################### $regfile = "m32def.dat" ' oder bei Mega16 $regfile = "m16def.dat" $baud = 9600 $crystal = 8000000 'Quarzfrequenz Config Scl = Portc.0 'Ports fuer I2C-Bus Config Sda = Portc.1 Config Pind.6 = Output 'Schrittmotoren Ein/Aus Config Pinc.5 = Output 'Schrittmotor Links Richtung Config Pinc.3 = Output 'Schrittmotor Links Step Config Pinc.4 = Output 'Schrittmotor Rechts Richtung Config Pinc.2 = Output 'Schrittmotor Rechts Step Config Int1 = Rising Enable Interrupts On Int1 Int1_isr Const Writeeingabeport_adr = &H7E 'I2C Adr PCF 2 Const Readeingabeport_adr = &H7F 'I2C Adr PCF 2 Dim I2cdaten As Byte 'Datenbyte aus PCF8574 Dim I As Byte Dim J As Word Dim A As Word Dim B As Word 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 I2cdaten = 1 B = 251 'Taste 2 (Port4) A = 247 'Taste 1 (Port3) I = 0 Do If I2cdaten = A Then Gosub Motor1_2 If I2cdaten = B Then Gosub Motoren_aus Loop '********************* Unterprogramme **************************************************************** Motor1_2: Portc.5 = 0 'Richtung Motor 1 Portc.4 = 1 'Richtung Motor 2 Portd.6 = 1 'Motoren einschalten Portc.2 = 0 Portc.3 = 0 Waitms 1 Portc.2 = 1 Portc.3 = 1 Waitms 1 Portd.6 = 0 Return Read_data: Return Motoren_aus: Portd.6 = 0 Return Int1_isr: I2cstart I2cwbyte Readeingabeport_adr 'Lesebefehl an PCF schicken I2crbyte I2cdaten , Nack 'Datenbyte von PCF lesen I2cstop Waitms 50 Print I ; " Eingangsport Wert" ; I2cdaten Incr I Return
Martin
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
Hallo Martin,
erst mal vielen Dank für die Mühe.
Werde es heute Abend testen und mich noch mal melden.
Gruß Silvio
hallo Martin,
leider funktioniert das Programm so nicht.
Konnte es zwar übertragen, aber es reagiert auf keine Taste.
Config Int1 = Rising
Enable Interrupts
On Int1 Int1_isr
Kann es vielleicht sein, dass der AVR mit "= Rising" auf einen Highpegel warte. Habe die Tasten gegen GND schalten lassen. ???
Was ist eigentlich mit "On Int1 Int1_isr" gemeint?
Du weißt doch ->Neuling
Gruß Silvio
also, erstens musst du natürlich den int-ausgang vom pdc an den int1 dranpaggn, dann sollte das falling sein, du hast recht, aber nur weil der int vom pcf low-active ist...
und mit on int1 int1_isr ist gemeint: wenn int1 anspringt, und sacht: du ich hab da was bekommen, dann springe in die subroutine int1_isr (dabei setzt sich isr aus Interrupt Service Routine zusammen)
Martin
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
Hallo Martin,
leider kann ich damit nicht all so viel anfangen.
den int-ausgang vom pdc an den int1 dranpaggnZitat von x-ryder
der int vom pcf low-active ist
Kannst du mir das noch mal eindeutschen?
(ich weiss, es nervt schon)
Gruß Silvio
also, der AVR hat dochn port namens int1 richtig, das iss ne sekundäre funktion von sonem pin... der muss an den INT ausgang vom pcf.
dann sollteste den eben nich als rising sondern als falling configurieren
Martin ^^
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
langt es also wenn ich deinen Code
von Config Int1 = Rising
auf Config Int1 = Falling
umschreibe?
Gruß Silvio
japp, aber du musst den int auch noch anschließen
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
so nun habe ich das Prgramm auf den Interrupt Int2 umgeschrieben.
Nur leider funktioniert es noch immer nicht.Code:'****************************************************************************** 'über die Tasten 1[Porteingang 3] und 2[Porteingang 4] am rnbfra-Board sollen die beiden Schrittmotoren durch einen Interrupt gesteuert werden ein aus '****************************************************************************** $regfile = "m32def.dat" $baud = 9600 $crystal = 8000000 'Quarzfrequenz Config Scl = Portc.0 'Ports fuer I2C-Bus Config Sda = Portc.1 Config Pind.6 = Output 'Schrittmotoren Ein/Aus Config Pinc.5 = Output 'Schrittmotor Links Richtung Config Pinc.3 = Output 'Schrittmotor Links Step Config Pinc.4 = Output 'Schrittmotor Rechts Richtung Config Pinc.2 = Output 'Schrittmotor Rechts Step Config Pinb.2 = Input 'Interrupt Int2 Config Int2 = Falling Enable Int2 Enable Interrupts On Int2 Int2_isr Const Writeeingabeport_adr = &H7E 'I2C Adr PCF 2 Const Readeingabeport_adr = &H7F 'I2C Adr PCF 2 Dim I2cdaten As Byte 'Datenbyte aus PCF8574 Dim Taste1 As Word Dim Taste2 As Word Dim I As Word 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 I2cdaten = 1 Taste1 = 247 'Taste 1 (Eingangsport-Port3) Taste2 = 251 'Taste 2 (Eingangsport-Port4) I = 200 '******************** Hauptprogramm ******************************************** Do If I2cdaten = Taste1 Then Gosub Motor1_2 If I2cdaten = Taste2 Then Gosub Motoren_aus Loop '********************* Unterprogramme ****************************************** Motor1_2: Portc.5 = 0 'Richtung Motor 1 Portc.4 = 1 'Richtung Motor 2 Portd.6 = 1 'Motoren einschalten Portc.2 = 0 'Step rechts Portc.3 = 0 'Step links Waitms 1 Portc.2 = 1 'Step rechts Portc.3 = 1 'Step links Waitms 1 Portd.6 = 0 'Motoren ausschalten Return Read_data: Return Motoren_aus: Portd.6 = 0 'Motoren ausschalten Return Int2_isr: I2cstart I2cwbyte Readeingabeport_adr 'Lesebefehl an PCF schicken I2crbyte I2cdaten , Nack 'Datenbyte von PCF lesen I2cstop Waitms 50 Print I ; " Eingangsport Wert" ; I2cdaten Incr I Return![]()
Nochmal zur Funktionsweise:
An den Eingangsport 3 und 4 des rnbfra-Board habe ich je einen Taster der auf GND schaltet. Die Tasten geben Werte von 247 und 251 zurück.
Durch drücken einer Taste soll das Hauptprogramm(die Schleife) unterbrochen werden und den Wert in den I2cdaten schreiben. Damit zurück ins Hauptprogramm springen und den Wert entsprechend auswerten und das entsprechend Unterprogramm(Motoren1_2 bzw. Motoren_aus) aufrufen.
Habe ich irgendwo einen Denkfehler drin oder muß ich anders an das Problem ran...?
Gruß Silvio
Lesezeichen