Einfaches Nachladen der Akkus reicht völlig. Volle Akkus werden bei meinem RP6 mit ca. 8,4V gemessen.
Natürlich könnte ich auch schnell mit C/C++ ein neues Proggi schreiben und den Quellcode öffentlich machen.
Ich kann das leider nicht, dafür kann ich in drei Minuten ein passendes Tool ergooglen ;)
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:
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);
}
Es werden viermal hintereinander ab dem Start der 150. Zeile jeweils 255 Werte eingelesen und dargestellt. Die Ausgabe beginnt mit:
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
Lesezeichen