PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC Kanäle als ausgang nutzen



WarChild
24.01.2008, 18:12
Hallo,

bisher hat es mir gereicht mit dem was der RP6 an Bord hat herumzutüfteln, jetzt möchte ich jedoch die beiden freien ADC Ports als Ausgänge nutzen.

1. Welche Befehle benötige ich, um sie als Ausgang zu definieren und um sie mit 1 oder 0 zu belegen?
- Ich bitte darum, alle Befehele mit einer kleinen Erläuterung zu versehen.

2. Ich möchte einen SRF02 an den I²C Bus hängen und im Handbuch meine ich irgendetwas von Pullup Widerständen gelesen zu haben, um immer ein eindeutiges Potential auf der SDA- und SCL- Leitung zu haben.
Letztendlich werden doch einfach nur irgendwo, wo platz ist, ein Widerstand zwischen der SDA-Leitung und VDD und einer zwischen der SCL-Leitung und Vdd eingelötet oder? Wieviel kOhm sind ratsam? 10k oder 47k?

Ich habe das tolle Buch "C von A bis Z" gelesen, aber leider kommen da die Microcontroller bezogenenen Funktionen nicht vor. Gibt es ein gutes Buch über Microcontroller bezogene Programmierung in C?

Vielen Dank im Vorraus!

WarChild

Dirk
24.01.2008, 20:12
Hallo WarChild,

Zu 1:
DDRA |= (ADC0 | ADC1); // PA0, PA1 als Ausgänge definieren
PORTA |= ADC0; // PA0 high
PORTA &= ~ADC0; //PA0 low

Zu 2:
Auf dem RP6-Mainboard sind die I2C-Pullups schon drauf (R32/33 4,7kOhm).

Gruß Dirk

WarChild
24.01.2008, 22:55
Danke!!!

mfg WarChild

carlitoco
25.01.2008, 12:14
wie schnell arbeiten die Ultraschall sensoren ? könnte man diese auf einem Servo einsetzen, welcher sich inner halb von 2sek. hin und zurück dreht? -also die vollen 180° ausnutzt?

Danke

WarChild
25.01.2008, 19:43
Natürlich kann der SRF02 während der 180° drehung Messwerte aufnehmen, die frage ist nur wieviele.

Prinzipiell wird jedesmal wenn man den SRF02 über I2C anspricht eine Messung ausgeführt.
jedesmal wenn dieser code durchlaufen ist hat man einen Wert:


Function Srf02_entfernung(byval Slaveid As Byte) As Integer
Local Lob As Byte
Local Hib As Byte
Local Firmware As Byte
Local Temp As Byte
Local Slaveid_read As Byte
slaveid_read = Slaveid + 1
'Messvorgang in starten
I2cstart
I2cwbyte Slaveid
I2cwbyte 0
I2cwbyte 81 'in Zentimetern messen
I2cstop
Waitms 65 'minimale Wartezeit für Messung
bei SRF02
I2cstart
I2cwbyte Slaveid
I2cwbyte 2 'Leseregister festlegen


Also: mann muss zwei Bytes via I2C schreiben, 65ms warten und dann zwei Bytes auslesen. Das darf max. 75ms dauern. Bei 2 sec. Schwenkzeit, also von ganz links nach ganz rechts, sind das 26,66 messwerte, also alle 6,75° ein Messwert.

Das ganze ist aber enorm timing abhängig, wenn du damit einen Rundumscann der Umgebung machen willst.

mfg WarChild