Einfaches Nachladen der Akkus reicht völlig. Volle Akkus werden bei meinem RP6 mit ca. 8,4V gemessen.
Ich kann das leider nicht, dafür kann ich in drei Minuten ein passendes Tool ergooglen ;)Natürlich könnte ich auch schnell mit C/C++ ein neues Proggi schreiben und den Quellcode öffentlich machen.
Beim cam2bmp-Programm kann man die seriellen Daten auch im RP6Loader betrachten. Allerdings nur, wenn man man nach der Ausgabe den RP6 mit [STRG-R] wieder stoppt um einen Zeilenvorschub zu erzwingen. Beim einfachen Testprogramm sollte man sofort etwas sehen. Obwohl es etwas ungeschickt programmiert ist sollte es trotzdem funktionieren:
Es werden viermal hintereinander ab dem Start der 150. Zeile jeweils 255 Werte eingelesen und dargestellt. Die Ausgabe beginnt mit:Code:// Kleines Testprogramm zur Funktionsprüfung 1.4.10 mic #include "RP6RobotBaseLib.h" void ADC_Init(void) { extIntOFF(); // schaltet den E_INT1-Port auf Eingang für den ADC // ADC interne Referenz 2,56V, Ergebniss linksbündig, Kanal ADC4 (E_INT1) ADMUX = (1<<REFS1) | (1<<REFS0) | (1<<ADLAR) | 4; // setze free running triggern SFIOR = (0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0); // kein Interupt, Wandler einschalten, prescaler /2, ADC läuft nun mit 4MHz! ADCSRA = (0<<ADIE) | (1<<ADEN) | (0<<ADPS2) | (0<<ADPS1) | (1<<ADPS0); // Autotriggern bedeutet jetzt free running aktivieren, altes Flag löschen ADCSRA |= (1<<ADATE) | (1<<ADIF); // Initialisierung starten ADCSRA |= (1<<ADSC); // und noch die empfohlene Initiallesung while (!(ADCSRA & (1<<ADIF))); ADCSRA |= (1<<ADIF); } int main(void) { uint8_t bildspeicher[1024], *bildzeiger; // 1KB * 8Bit Bildspeicher bereitstellen uint8_t spalte, zeile, sync, c; initRobotBase(); ADC_Init(); while(1) { writeString_P("---------------------------\n"); for(c=0; c<255; c++) // Bildspeicher löschen (mit Byte-Variable) { bildspeicher[c]=bildspeicher[256+c]=\ bildspeicher[2*256+c]=bildspeicher[3*256+c]=0; } for(c=0; c<4; c++) // viermal den selben Bereich einlesen { bildzeiger=&bildspeicher[256*c]; // Zeiger auf Start des Bildspeicherbereich cli(); do // Warten auf langen Syncbereich = Bildstart { sync=0; while (ADCH > 20); // warten solange Bilddaten erkannt werden while (ADCH < 30) sync++; // Länge des Sync-Signal zählen }while (sync < 40); // größer 40 bedeutet Bildstart zeile=150; // durchhangeln bis Zeile 150 while(zeile--) { while (ADCH > 20); // Bilddaten while (ADCH < 30); // Sync } spalte=255; do *bildzeiger++=ADCH; while(spalte--); // 254 Werte einlesen //while(spalte--) *bildzeiger++=ADCH; // dito //do *bildzeiger=ADCH; while(*bildzeiger++ > 20); // schneller ;) sei(); } for(spalte=0; spalte != 255; spalte++) // Alle Durchgänge gemeinsam ausgeben { writeInteger(spalte, 10); writeString_P(": "); writeInteger(bildspeicher[spalte], 10); writeString_P(" "); writeInteger(bildspeicher[256+spalte], 10); writeString_P(" "); writeInteger(bildspeicher[2*256+spalte], 10); writeString_P(" "); writeInteger(bildspeicher[3*256+spalte], 10); writeString_P("\n"); } while(!(getBumperLeft() || getBumperRight())); // Nochmal? Terminal löschen! } return(0); }
writeString_P("---------------------------\n");
Wenn danach nichts mehr kommt bleibt das Programm irgendwo bei der Syncsuche stecken. Hier könnte man vielleicht mit geänderten Abfragen weiterkommen:
while (ADCH > 25); // Bilddaten
while (ADCH < 35); // Sync






Zitieren

Lesezeichen