Hi Leute,
für meine Studienarbeit baue ich gerade eine kleine Hardware, deren
Aufgabe es ist, eine Spiegelreflex und zwei Laser miteinander zu
synchronisieren.
Basis ist ein Mega8 @10MHz.
Als Schnittstelle für den Benutzer gibt es mehrere Taster (hardwäremäßig
entprellt mit Schmitt-Triggern). Ein Poti am ADC soll die Leistung der
Laser regeln. Außerdem ein Display (Batron BTHQ 21605V-FSRE-I2C-COG),
angeschloßen über TWI.
Einstellbar sollen die Pulsdauer der Laser, der Pulsabstand zwischen
Laser 1 & 2 und die Anzahl an Wiederholungen der Sequenz sein. Außerdem
gibt es einen Modus, in dem die Laser per PWM geregelt im Dauerbetrieb
werden.
Der Timer0 Overflow Interrupt kümmert sich um eine regelmäßige Abfrage
der Taster.
Timer2 soll im CTC Modus eine genaue Zeitbasis liefern. Der Compare
Match Interrupt togglet dabei Pin T1 (PD5), der gleichzeitig als Clock
für Timer1 verwendet wird. Die beiden Compare Match Interrupts von
Timer1 kümmern sich dann um das Ein- und Ausschalten der Laser. Die
Kamera wird davor und danach "manuell" geschaltet, da sie zu langsam
ist.
Soweit die Theorie.......................
Das Menü zum Einstellen der Werte hat vorgestern funktioniert. Das
Display hat alles brav angezeigt.
Gestern wollte ich mich an die Programmierung der Timer 1 & 2 machen. In
meiner Initialisierungsphase habe ich daraufhin eingefügt:
1 | int main(void){
|
2 | ...
|
3 | DDRD = (1<<DDD5);
|
4 | ...
|
5 | }
|
Außerdem noch die Einstellungen der Timer. Unter anderem:
1 | ISR(TIMER2_COMP_vect){
|
2 | PORTD ^= (1<<PD5);
|
3 | }
|
Plötzlich hat das Display nichts mehr angezeigt. (Das hängt an PC4/SDA
und PC5/SCL).
Ich bin erstmal von einem Hardwarefehler ausgegangen (hab leider schon
mehrere Spannungsregler gebrutzelt, beim Versuch, das Display zum Laufen
zu bekommen...). Hab den halben Tag damit zugebracht, auf der Platine
nach Lötbrücken, etc. zu suchen.
Erst dann kam mir die Idee, das Display mal aufs Breadboard zu stecken
und das Testprog, das noch auf meinem Mega32 war, zu benutzten.
Natürlich war mit dem Display und der Spannungsversorgung alles i.O.
Also Softwarefehler...
Nachdem ich die Zeile mit dem DDRD auskommentiert, kompiliert und
geflasht hab ging das Display auch am Mega8 wieder einwandfrei.
Kann mir einer von euch erklären, wieso ein Eintrag im DDRD die
Funktionalität vom TWI (Teil von Port C) beeinflusst?
Ich bin inzwischen mit meinem Latein am Ende. Nicht, dass ich Latein
könnt ;)
Gruß,
Uwe