PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche kleine Hilfe beim Umschreiben auf Mega32



stefan_Z
13.05.2009, 21:10
Hi!

Meine C-Kenntnisse sind leider äußerst bescheiden und gerade hänge ich...

Das Original-Projekt stammt hierher:
http://www.hoelscher-hi.de/hendrik/light/dmxanalyzer.htm
Nun ist aber kein ATmega8515 zur Hand, daher habe ich es auf dem M32 umgebogen, der ist ja auch nicht so viel anders...

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.

Wo hängt das Ding? Weiß weiß Rat?

Stefan

wkrug
13.05.2009, 22:46
Da Du ja auch den Port C benutzt, hast Du die JTAGEN Fuse auch abgeschaltet ???
Ist blöderweise als Default aktiviert und beeinflusst den Port C.

stefan_Z
13.05.2009, 22:52
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).

wkrug
13.05.2009, 23:09
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.

stefan_Z
13.05.2009, 23:45
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.

cipher
14.05.2009, 08:52
Hi!

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.


Viele Grüße,

Markus

McJenso
14.05.2009, 19:43
Hallo,

nimm mal für die Tests den Watchdog raus.

Gruß

Jens

stefan_Z
14.05.2009, 20:23
Hab alle Zeilen wo "WDT" vorkommt auskommentiert.
Leider keine Änderung :-(

wkrug
14.05.2009, 23:24
Hallo Stefan -

Du hast PN!