Forum: Mikrocontroller und Digitale Elektronik Migration Tiny13->Tiny25 bzw. 45


von Sebastian V. (voitzsch)


Lesenswert?

Hallo zusammen,

ich habe ein Projekt, bei dem bisher ein Tiny13 zum Einsatz kommt. Es 
handelt sich um einen Protokollumsetzer, der Blitzgeräte zu 
Digitalkameras kompatibel macht.

Nun möchte ich das Programm erweitern und die 1024 Bytes Speicher des 
Tiny13 sind zu knapp. Die Wahl ist daher auf den Tiny25 bzw. zu 
Testzwecken erstmal den Tiny45 gefallen.

Die Fusebytes habe ich angepaßt, zudem hat die von mir verwendete 
AVR-libc einen Bug, sodass die Pin-Change-IRQ-Routine SIG_PIN_CHANGE 
(statt SIG_PIN_CHANGE0) heißen muss. Auch das habe ich geändert sowie 
die Pins PB1 und PB2 umbelgt (INT0 wird benutzt und sitzt bei beiden auf 
verschiedenen Pins).

Das Programm funktioniert nun im Großen und Ganzen. An PB2 liegt ein 
Taksignal von der Kamera an (dafür wird INT0 verwendet), was durch 
verschieden lange Taktpulse Lesen, Schreiben, die einzelnen Bits und 
einen Vorblitz ankündigt. PB1 führt die entsprechenden Daten. Der Blitz 
hängt an PB3 und PB4, wobei auf PB3 das Taktsignal durchgeschleift wird 
und PB4 die Daten überträgt. All dies klappt wunderbar.

Was nicht klappt: wenn auf PB0 ein LOW anliegt, heißt das, dass der 
Blitz gezündet wurde. In diesem Fall (PIN_CHANGE) wertet die Software 
die Daten aus und steuert die Länge des Blitzes. Und genau dieser Teil 
funkioniert nicht.

intfire:mov templo,fltime
        sbrs templo, 5
        subi fltime, (-0x20)
        sbrc templo, 5
        subi fltime, (0x20)
        andi fltime, 0x3f
nocorr: ldi zlo, lo8(FLASH_TIME_TBL)                    // flash time 
table
        ldi zhi, hi8(FLASH_TIME_TBL)
        add zlo, fltime                                 // add offset
        adc zhi, zero_reg
        lpm ylo, Z                                      // get flash 
time low byte
        clr yhi
        cpi fltime, 0x37
        brlo nohigh
        adiw ylo, 63                                    // add 100 on 
upper 16 values
        adiw ylo, 37

nohigh: rcall flash

Die Routine passt den von der Kamera empfangenen Wert an und schlägt 
dann die korrekte Belichtungszeit in einer Tabelle nach. Aus irgeneinem 
Grund stimmt der Stopp-Befehl (wird ebenfalls über die Taktleitung 
gemacht) nicht, er kommt viel zu früh. Hat sich an der Adressierung über 
das Z-Register im Zusammenhang mit lpm was geändert?

So, nach der ganzen Vorgeschichte nun die Frage: gibt es einen 
Unterschied zwischen Tiny25 und Tiny13, den ich nicht bedacht habe? Die 
Taktfrequenz ist bei beiden gleich eingestellt (sonst würde auch die 
Erkennung der Lese- und Schreibzyklen nicht erkennen, das ist über einen 
Timer realisiert, der die Längen der Pulse prüft).

Es werden der Pin-change-Interrupt, INT0 und Timer0 (mit 
Overflow-Interrupt) benutzt. Sonstige Änderungen gab's nicht; die 
Objektfiles vor dem Linken sind identisch (bis auf die Pin-Änderungen 
natürlich).

Hat jemand eine Idee?

Danke,
Sebastian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.