Forum: Mikrocontroller und Digitale Elektronik Umstieg von Pic auf ATmega -> HELP!


von Martinw (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute!

Also beschäftige mich jetzt schon längere zeit mit PICs und will jetzt
auch mal ein wenig mit AVRs arbeiten!
Als Programmiergerät verwende ich den SmartProg von Elnec.
Mein erstes kleines Programm schaut genau so aus:

include "m16def.inc"

Init:
    ldi r16, 0xFF    ;Port B durch Ausgabe von 0xFF ins
    out DDRB, r16       ;Richtungsregister DDRB als Ausgang
konfigurieren

    ldi r16, 0xFF
    out PORTB, r16      ;PORTB auf 0xFF setzen -> alle LEDs aus

Main:
  sbi  PORTB,0
  cbi  PORTB,0
  rjmp  Main

Aber es passiert genau garnichts! Am Oszilloskop müsste der PORTB,0 Pin
ja ein Rechteckssignal ausgeben oder? Aber er ist nur auf Low! Der 2Mhz
Quarz den ich am Chip betreibe schwingt aber schön brav, sieht man im
Oszzi. Angehängt habe ich den Screenshot der Fuse bits, da ich mir mit
denen nicht so ganz sicher bin ob die so stimmen...

Vielleicht könnt ihr mir da mal schnell weiter helfen.

Danke

MfG Martin W

von Dieter B. (Gast)


Lesenswert?

Hallo

Stackpointer einstellen ?

MFG
Dieter

von Martinw (Gast)


Lesenswert?

Hmm Stackpointer!?
Was wo wie??? Ich mich nix auskennen mit AVR!!!
Ach ja handelt sich um einen ATMEGA161!

Danke

MfG Martin W

von Fritz Ganter (Gast)


Lesenswert?

Hallo Martin!

Mach mal zwischen
sbi  PORTB,0
und
cbi  PORTB,0
ein paar NOPs rein.

von Martinw (Gast)


Lesenswert?

Die Nops helfen auch nichts, das oszilloskop müsste übrigens so hohe
Frequenzen noch leicht schaffen...

MfG Martin W

von Martinw (Gast)


Lesenswert?

Ok es geht jetzt!

Lag am Quarz! Keine Ahnung wieso aber er hat die 2 Mhz nicht genommen,
mit einem 5 Mhz Quarz geht es jetzt!
Wann sollte man eigentlich slow rising und fast rising power bei den
cksel fuses einstellen?

Danke

MfG Martin W

von Fritz Ganter (Gast)


Lesenswert?

Nimm mal die Zeile
 cbi  PORTB,0
raus, und schau, ob der Ausgang dann auf High bleibt.

von leo9 (Gast)


Lesenswert?

Der stackpointer müsste egal sein, kommen ja keine calls und ints vor.
Mich wundert eher dass obiger source fehlerfrei compiliert wird, vorm
include fehlt ein Punkt. Du solltest auch die richtige .def Datei
laden, die Portdefinitionen sind zwar gleich, aber vielleicht
unterscheiden sich andere Speicherstellen.
Ist der obige Code alles oder nimmst du noch andere Initialisierungen
vor?

grüsse leo9

von Martinw (Gast)


Lesenswert?

Hi

Nein der Punkt ist nur beim Kopieren verschwunden ;-) also ich bekomme
schon eine richtige Hex file!
Aber .include "m16def.inc" passt doch für den ATMEGA161 oder nicht?

MfG Martin W

von leo9 (Gast)


Lesenswert?

sorry, aber ich kann auch nicht alle avrs auswendig, für den mega161
würde ich die m161def.inc verwenden. Die exakten Unterschiede findest
du im Datenblatt, möglicherweise unterscheiden sie sich aber durch die
Speichergröße und dann wirds zum Stack-Initialisieren wieder wichtig
die richtige zu verwenden.

grüsse leo9

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.