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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.