PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nibobee digitale Inputs/Outputs



chro-nos
20.08.2010, 13:10
Hallo!

Ich habe mich jetzt durch diverse Threads geklickert und die Dokumentation durchstöbert aber so richtigen durchblick habe ich nicht.

Ich möchte einfach 2 bin 3 Inputs und genau so viele digitale Outputs nutzen. Das heißt ich möchte auf bestimmten Pins die Versorgungsspannung nach außenhin anlegen und umgekehrt wenn ich einen Port auf die Betriebsspannung lege, soll das erkannt werden.

Ich habe schon einiges von angeschlossenen Sharp Sensoren gelesen aber ich werde da nicht so richtig schlau aus den Schaltungen. Muss nix analoges sein, geht um rein digitale Zustandsabfragen.

WICHTIG: Die Funktion der Liniensensorik soll ohne Einschränkungen weiter nutzbar sein.

Hätte da vielleicht jemand ein kleines Codebeispiel für mich, in dem ersichtlich ist, wie digitale Ein- & Ausgänge abfrage und beschalte?

Vielen Dank!

workwind
20.08.2010, 17:17
Hier der gewünschte Beispielcode:


activate_output_groupbit(IO_EXT, 0); // Port C Bit 0 als Ausgang
deactivate_output_groupbit(IO_EXT, 1); // Port C Bit 1 als Eingang

set_output_groupbit(IO_EXT, 0); // Port C Bit 0 auf 5V schalten
clear_output_groupbit(IO_EXT, 0); // Port C Bit 0 auf 0V schalten

uint8_t value = get_input_groupbit(IO_EXT, 0); // Wert von Port C Bit 1 holen

radbruch
20.08.2010, 17:38
Hallo

Die Bee besitzt fünf Erweiterungstecker X1-X5. Das sind jeweils vier Pins, Vcc, Gnd und zwei Portpins. Bei diesen freien Portpins kann man die Datenrichtung und den Pegel nach Belieben einstellen/abfragen. Zusätzlich kann man noch recht einfach die Pins der "Fühler" nutzen:

http://radbruch.bplaced.net/robot/nibobee/lcd/nibobee-lcd4_klein.jpg (http://radbruch.bplaced.net/robot/nibobee/lcd/nibobee-lcd4.jpg)
(Bild aus https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=51821)

Nichtssagenden Beispielcode erspare ich mir hier...

Gruß

mic

chro-nos
23.08.2010, 06:48
Vielen Dank schon einmal für die Hilfe!

Hatte auch versucht die Taster als Input zu nutzen, habe bim durchmessen dann festgestellt, das diese Masse schalten. Da müsste ich noch eine Inverterschaltung basteln oder eben ein klenes Relais dazwischen setzen.

Wie finde ich denn raus, welcher Port denn welcher ist?

radbruch
23.08.2010, 07:21
Hallo

Welcher Pin wie verschaltet ist zeigt der Schaltplan der bee:
http://download.nicai-systems.com/nibo/nibobee_schematic_1_07.pdf

Die Taster gehen auf PC4-7, sind aber je mit einem Vorwiderstand beschaltet (R46-49, je 180 Ohm). So wird auch bei auf High geschaltetem Ausgang und gleichzeitig betätigtem Taster kein Schaden verursacht.

Gruß

mic

chro-nos
23.08.2010, 14:52
Ich habe mich mal versucht, aber leider komme ich zu keinem Erbgebnis, zumindest keinem zufriedenstellenden:


#include <nibobee/iodefs.h>
#include <nibobee/led.h>
#include <nibobee/delay.h>

int main()
{

led_init();
//activate_output_groupbit(IO_EXT, 0); // Port C Bit 0 als Ausgang
deactivate_output_groupbit(IO_EXT, 1); // Port C Bit 1 als Eingang
int value=0;


while(1==1)
{


//set_output_groupbit(IO_EXT, 0); // Port C Bit 0 auf 5V schalten
//clear_output_groupbit(IO_EXT, 0); // Port C Bit 0 auf 0V schalten

value = get_input_groupbit(IO_EXT, 0); // Wert von Port C Bit 1 holen

if (value>0)
{
led_set(LED_L_RD,1);
}
else led_set(LED_L_RD,0);

}
return 0;
}


Wenn ich an X4 Pin 1 Vcc anlege geht die entsprechende LED an, aber beim wegnehmen der Spannung erst zerzögert aus. Was mache ich falsch oder habe ich einen Idiotenfehler übersehen?

Weiterhin würde mich noch interessieren, was es genauer mit der Kombination der X-Pins die physch vorhanden sind und den Ports von denen hier im gesprochen wird auf sich hat.
Heißt das jetzt Port C enspricht X4?

activate_output_groupbit(IO_EXT, 0); // Port C Bit 0 als Ausgang
deactivate_output_groupbit(IO_EXT, 1); // Port C Bit 1 als Eingang

Das heißt activate/deactivate legt fest ob Eingang oder Ausgang, 0/1 legt das jeweilige Bit fest. Ist Bit 0 dabei Pin 1 und Bit 1 Pin 2?
Und wo lege ich denn in dieser Anweisung den Port fest den ich konfigurieren will?IO_EXT klingt so allgemein.

Fragen über Fragen.

chro-nos
25.08.2010, 06:59
Keiner? :( Ich seh da leider echt nicht mehr durch.

radbruch
25.08.2010, 13:04
Hallo

Im Anhang ein Ausschnitt aus dem Schaltplan der bee. Rechts die X-Erweiterungsstecker, links der Mega16 der bee. Jeder X-Stecker hat vier Stifte: Vcc,GND und je zwei Portpins des Mega16.

Der Mega16 hat vier Ports mit jeweils acht Portpins: PA0-PA7, PB0-PB7, PC0-PC7 und PD0-PD7. Die Portpins PA0-7 sind dabei auch die Eingänge der acht ADC-Kanäle. Die Zählung beginnt jeweils bei null, weil die Wertigkeit der Portpins innerhalb eines Ports einer Zweierpotenz entspricht. 2^0 entspricht PORTx0, 2^7 ist PORTx7

Jeder Portpin kann drei Zustände haben: Ausgang High, Ausgang Low und Eingang (und Eingang mit internem Pullup (http://www.rn-wissen.de/index.php/Pullup_Pulldown_Widerstand)) Ein Port mit seinen acht Pins kann über zwei Register gesteuert werden: Das Datenrichtungsregister (DDRA-DDRD) steuert die Datenrichtung und das Portregister (PORTA-PORTD) setzt den Ausgangspegel oder schaltet den internen PullUp. Mit den Eingangsregistern (PINA-PIND) kann man die Pegel der Portpins digital einlesen.

http://www.rn-wissen.de/index.php/Avr#IO-PORTs
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports
http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen

Gruß

mic