Bestimmt nichts weltbewegenden, der Code ist auch kommentiert, das Projekt compiliert ohne Fehler/Warnings für den M32 (AVRStudio 4), doch nach der ersten LCD-Ausgabe kommt nix mehr, auch die Buttons gehen nicht. M32-Code ist im Anhang!
Änderungen/Infos soweit:
- iom32.h im Header von main.c verlinkt
- PortA auf PortC umgelegt (in lib_lcd.c - für das LCD) - funktioniert auch
- Der Kram an PortE ist ganz raus - gibts beim M32 nicht - habe ich auch im Source nicht gefunden
- DIP-Schalter an PortC habe ich im Source auch nicht gefunden - bin ich blind oder wars einfach nicht implementiert?
- die anderen Pins entsprechen soweit alle dem M8515 (nach Name/Funktion) - also auch EN für den MAX485 usw.
- In lib_dmx_in.c und lib_dmx_out.c habe ich ISR (UART_RX_vect) und ISR (UART_TX_vect) geändert in ISR (USART_RXC_vect) und ISR (USART_TXC_vect), da kam vorher ein Warning - scheint bei M32 anders zu heißen.
- In main.c habe ich noch die Zustände der Error-LED gewechselt, da meine Schaltung Anode/Kathode getauscht hat. Also immer PORTD |= (1<<PD7) <-> PORTD &= ~(1<<PD7). Die LED leuchtet übrigens dauerhaft.
Jo klar, die ist schon lange aus PortC tuts ja auch - da ist das LCD dran.
Hab die Einzelteile auch per Bascom getestet - als Schalter, Display, UART - geht alles.
Interner 8MHz RC ist an und alles andere aus (also das was Sinn macht).
OK JTAGEN ist halt ein Fehler der gerne gemacht wird.
Was mir noch zu USART einfällt -
Beim ATMEGA32 muss immer zuerst das Statusbayte ausgelesen werden, sonst geht die Information verloren.
Das könnte beim 8515 noch anders gewesen sein.
Schau mal die Schreib und Leseroutinen für den USART durch.
Ein DMX Startbyte wird üblicherweise als Frame_Error detektiert.
Wenn dann vorher das UDR ausgelesen wird funktioniert das nicht mehr.
Ich hab leider kein AVR_GCC auf meinem Rechner, sonst würd ich es bei mir mal ausprobieren.
Hmm also die Registernamen scheinen die selben zu sein.
So wie ich Atmel kenne tickt das dann auch gleich.
Kann auf jeden Fall keinen Unterschied erkennen.
Die Poriterung von einem AVR auf einen anderen lässt sich leider nicht so ganz einfach durchziehen, da die Controller an sich nicht 100% kompatibel sind.
Ich hatte mal das Problem beim Portieren zwischen zwei ATmegas (von 8 auf 32 glaub ich). Hier muss man mit den Registern UBRRH und UCSRC aufpassen. Bei manchen Controllern sind das zwei Register, die tatsächlich unterschiedliche Adressen haben, bei anderen liegen die auf der gleichen Adresse und werden nur durch Bit 7 unterschieden.
Problematisch ist auch das Pin-Toggle-Feature. Manche Controller können den Zustand eines Ausgangs wechseln, indem PINxy mit 1 beschrieben wird, andere nicht.
Am Besten die Handbücher der beiden Controller mal zur Hand nehmen und die entsprechenden Features vergleichen.
Lesezeichen