Hallo
Aller Anfang ist schwer.
X4 habe ich gewählt, weil ich mir die C-Pins gut merken kann und weil sie Bit0 und Bit1 am Port belegen. Prinzipiel kannst du mit allen Pins digitale (high/low) Signale auswerten. Da aber nur ein paar Pins auch analoge Signale einlesen können sind diese Pins "wertvoller" und man versucht, diese für spätere Erweiterungen frei zu halten.
Die Signale deines SRF05 sind eindeutig digital:
Bild hier
Hier noch das überarbeitete Programm:
Auf das Servo mag ich im Moment noch nicht eingehen, aber du kannst dich schon mal einlesen:Code:// SRF05 Ansteuerung mit der bee (zweiter Anlauf) mic 4.6.12 // Anschluß an X4: Vcc, GND, PC0=Start, PC1=Messwert (SRF04-Modus) // Datenblatt SRF05: http://www.robotikhardware.de/download/srf05doku.pdf // https://www.roboternetz.de/community/threads/58058-Nibobee-Ultraschall-wie-anschlie%C3%9Fen #include <avr/io.h> #include <util/delay.h> uint8_t messwert, timeout; int main(void) { DDRB = 0b0001111; // Die Pins der Leds sind Ausgang PORTB &= 0b11110000; // 0V ausgeben. Die Leds sind aus DDRC = 0b00000001; // Im Datenrichtungsregister PC0 als Ausgang definieren (Bit 2^0) PORTC &= ~(1<<PC0);// 0V ausgeben an PC0 PORTB |= 0x0f; // alle Leds an _delay_ms(1000); // eine Sekunde warten PORTC &= 0xf0; // alle Leds wieder aus while(1) { messwert=0; timeout=0; PORTC |= 1; // Startimpuls ausgeben _delay_us(20); // der Impuls muss mindestens 10µs dauern PORTC &= 0xfe; // Startimpuls fertig while(!(PINC & 0b00000010) && --timeout) _delay_ms(4); // timeout 1 Sekunde if(timeout>0) { while((PINC & 2) && (++messwert<16)) // Überlauf bei 16 { _delay_us(1666); // 25ms/16-Schritte } if(messwert<16) // wir können nur 4 Bit anzeigen { PORTC &= 0xf0; // alle Leds aus PORTC |= messwert; // Messwert dual anzeigen } } } return 0; }
http://www.google.de/search?q=servosignal
Gruß
mic







Zitieren

Lesezeichen