Hallo
hast du die Eingänge deklariert (dim porta = input)
normal musst du am Eingang nicht 3 sondern 5 Volt anlegen.
Du hast doch einen Atmega 32 oder?
3 Volt wird der wohl nicht erkennen.
Hallo,
habe mal eine Anfängerfrage:
Ich habe mich zwar durch das Handbuch hoch und runter gelesen finde aber nichts passendes. Ich habe ein Mega32 Board Ver 1.22 und möchte die Eingangsports (wie sie auf dem Board an sich betitelt sind) ansprechen bzw. auslesen.
Da es sich um Eingangsport handelt, muss ich sie mit PinX ansprechen wobei X für a,b,c,d steht. Soviel habe ich schon mitbekommen, aber ich weiß eben nicht ob es a,b,c oder d ist. Habe auch schon alle getestet (habe Port 1 und 2 der Eingangsports) eine 3V Spannung angelegt und weggenommen, aber kein Zustand hat sich geändert.
Mein Program
Habe danach Pina durch bin Pinb,c und d ersetzten lassen und die Spannung immer wieder angelegt und weggenommen, aber es änderte sich nichts in der Ausgabe... Woran kann das liegen, bzw. was habe ich falsch gemacht?Code:Dim X1 as Byte . . . Dim X8 as Byte X1 = pina.0 X2 = pina.1 . . . x8 = pina.7 Print X1; Print X2; . . . Print X8
Gruß
it03
Hallo
hast du die Eingänge deklariert (dim porta = input)
normal musst du am Eingang nicht 3 sondern 5 Volt anlegen.
Du hast doch einen Atmega 32 oder?
3 Volt wird der wohl nicht erkennen.
Hallo it03,
vermute mal du meinst das rnbfra 1.22 von robotikhardware.
Da sind doch schon einige Beispiel auf der CD-ROM mit geliefert.
Ein direktes Ansprechen ist da auch nicht möglich. Die Ein- und Ausgänge sind über I2C mit dem PCF verbunden.
So müssen die Eingänge über eine I2C Routine abgefragt werden.
--- Testprgramm 6 ---
### Silvio ###
Hallo zusammen!
Richtig, ich habe das rnbfra 1.22 mit Atmega32.
Mein Problem ist jetzt: ich will von einem externen Gerät (Avisaro WLAN-Modul) Signale empfangen. An den Ports des WLAN-Moduls liegen entweder 0,5V(aus) oder 3V(an) an (sogn. I/O Ports die ich per Web-interfaces setzen kann). Davon gibts es 8 Stück welche ich mit den Eingangsports auf dem Board verbinden möchte. Wenn ich allerdings dann das Testprogram laufen lasse, wird weiterhin der Wert 255 ausgegeben (was ja auch logisch ist, da kein Port mit GND verbunden ist).
Meine Frage:
Kann ich die Eingangsports irgendwie "umswitchen", so dass sie direkt auf die anliegende Voltzahl reagiert? D.h. ich lege an meinen I/O Port vom Modul eine 1 (3V) an und der entsprechende Port auf dem Board ist dadurch auch auf 1 gesetzt. Das müsste doch möglich sein, oder?
Danke für die Hilfe
Datenblatt Seite 287 ...Zitat von franzl
Dort steht was dazu, was der Mega32 als L / H erkennt ...
Grüße,
da Hanni.
Danke für die schnelle Antwort Hanni!
Ich habe was vergessen: "dim porta = input" hatte ich probiert, Bascom hat vorgeschlagen "as" anstatt "=" zu verwenden. Aber wenn ich "Dim porta as input" eingebe sagt er, dass Input kein DATA TYPE ist und ich bekomme es nicht compiliert. Dann ist mir der Befehl Config eingefallen und ich habe " Config porta = Input" angegeben. Das hat er gefressen allerdings ohne Erfolg. Es liegt immernoch 5V auf den Eingängen...
In Bascom gibt es auch noch den feinen Unterschied:
Ports Setzen
Ausgänge kann man definieren was man will,
wenn Du einen Pin aus Ausgang deklariert hast,
kannst Du den mittels Pin setzen was Du willst, der wird nicht HI
(z.B. Set PinB.3 )
Du musst diesen mit Set portB.3 ansprechen
oder PortB = %00000100.
Abfragen muss man ihn mit Pin (x = PinB.3)
Da hab ich mich auch schon dumm gesucht.
Zusammenfasung:
Verwende PIN zum einslesen und
verwende PORT zum ausgeben.
Gruss
Darwin (meine Projekte sind auf meiner Pinnwand zu finden)
Hmm .. das steht aber auch im Datenblatt *grübel*Zitat von darwin.nuernberg
mmh ja... ok Pin zum auslesen Port zum setzen. Soweit so gut aber es klappt nicht
Egal welchen Wert ich PortA (PortA ist doch für die Eingangsports, oder?) geben, am Board liegen immer 5V
Habe es auch mit DDRA = 0 versucht und die Werte habe ich auch schon in Binär (&B00000000) eingegeben. Hier mal mein Program:
Aber das kann doch nciht so schwer sein... Irgenwie muss ich da nen dicken Denkfehler haben.Code:'################################################### 'Testprogramm 6 'für 'RoboterNetz Standard-Roboter Board RBNFRA 1.1 ' '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" 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 $baud = 9600 $crystal = 8000000 'Quarzfrequenz Config Scl = Portc.0 'Ports fuer IIC-Bus Config Sda = Portc.1 Set Porta = 0 Portd.6 = 0 'Schrittmotoren erst mal ausschalten I2cinit I = 0 I2cdaten = 1 Do I2cstart I2cwbyte Readeingabeport_adr 'Lesebefehl an PCF schicken I2crbyte I2cdaten , Nack 'Datenbyte von PCF lesen I2cstop Waitms 50 Print I ; " Eingangsport Wert" ; I2cdaten Print I ; " Pin1 " ; Pina.0 Print I ; " Pin2 " ; Pina.1 Print I ; " Pin3 " ; Pina.2 Print I ; " Pin4 " ; Pina.3 Incr I Loop End
Mögliche Denkfehler:Zitat von it03
- Pullupwiderstände (egal ob intern oder extern) und "offener" PIN -> Messbar: 5V
- eine externe Beschaltung, die diesen Pin auf einen 5V Pegel zieht
(Grundlagen Digitaltechnik ...)
Mal so als Ansatz ... ob und inwiefern der Code stimmt oder nicht, kann ich nicht sagen ... Bascom liegt mir nicht so ...
Lesezeichen