Migration Tiny13->Tiny25 bzw. 45

OP #1198280
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.