Forum: Mikrocontroller und Digitale Elektronik atmega 8515 defekt?


von neu hier (Gast)


Angehängte Dateien:

Lesenswert?

hallo!

bin "microcontroller-newbie".

habe schaltung mit atmega, externem quarz(8mhz)+2*22pf kondi´s gegen
masse
und pin 9 - reset über 10k auf 5v + 100nf gegen masse,
blockkondensator 100nf unter ic-sockel,
und an port c 8-fach dip-schalter gegen masse...

verdrahtung sollte soweit ok sein.
programmiert wird der mega über ein externes universalprogrammiergerät
(galep3) und dann in die schaltung eingesetzt.

bekomme den controller nicht zum laufen, das einzige was funktioniert
ist die umschaltung (cksel 0001) takt intern auf (cksel 1111) takt
extern.
sowie der externe takt eingeschalten ist, kann ich mit dem oszi an xtal
1 und xtal 2 die schwingungen sehen was mich nur wundert, die amplitude
beträgt so ca. 1V.

jedoch funktioniert mein kleines testprogramm nicht(siehe anhang)
keine bewegungen auf den ports.
habe den code mit avr-studio 4 erstellt und dann das hex-file übner den
galep in den chip geschrieben.

wo könnte mein fehler liegen???
ist der chip noch zu retten?
was hab ich nicht beachtet?

von Andi (Gast)


Lesenswert?

Nur mal so als Anreiz: Stackpointer sollte am Programmstart
initialisiert werden. Siehe unter WICHTIG!
Ansonsten glaubst Du anscheinend, das der Inhalt von r16 nach jedem out
VERLOREN geht da Du r16 immer wiederholt mit dem selben Wert (0xFF oder
IN r16,PINC) füllst.
Es reicht auch nur einmal setzen und X-mal ausgeben.
Ansonsten setze CKSEL mal wieder zurück auf 0001 und prüfe, ob der 8515
auch mit den internen 1MHz läuft.
Wenn ja, dann ist CKSEL für den 8MHz-Quarz falsch gesetzt oder Du mußt
aufpassen, das Programmed = 0 und Unprogrammed = 1 ist.
Also statt für CKSEL 1111 setzt Du 0000 (externer Takt) oder statt 0001
eben 1110 für internen Takt.

.include "m8515def.inc"
;****interrupt vectors
 rjmp los             ;reset vector address
 .....
los:    ;WICHTIG! Stackpointer initialisieren
    ldi zl,low(RAMEND)
    out SPL,zh
    ldi zh,high(RAMEND)
    out SPH,zh
  cli        ;schaltet interrupts ab
    ldi r16, 0x00
    out DDRC, r16   ; port c -->eingang
    ldi r16, 0xFF
    out PORTC, r16  ; schaltet die internen pull-ups
    out DDRE, r16   ; portrichtung e  schreiben
    out DDRA, r16
    out DDRB, r16   ; schreibe port
    out DDRD, r16
loop:    in r16, PINC  ;lese port c ein
    out PORTE, r16  ;gib port c an port e aus
    out PORTA, r16  ;gib port c an port a aus
    out PORTB, r16  ;gib port c an port b aus
    out PORTD, r16  ;gib port c an port d aus
    rjmp loop

MfG
Andi

von Andi (Gast)


Lesenswert?

...grrrr...
immer dieser Copy->Paste-Teufel!
Stackpointer initialisieren sollte so sein:
    ldi zl,low(RAMEND)
    out SPL,zl
    ldi zh,high(RAMEND)
    out SPH,zh

MfG
Andi

von neu hier (Gast)


Lesenswert?

danke, andi für deinen hinweis mit dem register, dachte mir schon das
das so wie du es geschrieben hast richtig ist, nur wei der controller
absolut nicht reagierte, hab ich die register jedesmal neu geladen.
du weißt sicherlich, was mann alles versucht um fehler
auszuschließen...

die sache mit dem stackpionter war mir neu, allerdings brachte auch
dies keinen erfolg.

die sache mit dem cksel-
scheint auch ok zu sein, da im auslieferungszustand die fuse ja 0001
gesetzt ist.
wie geschrieben, fängt der externe quarz an zu schwingen, wenn ich
cksel von 0001 auf 1111 setze.
das ist aber die einzigste aktion, die ich zur zeit dem m8515 entlocken
kann.
die ports kommen mir als hochohmig geschaltet vor(tristate).
es ist also keine spannung zwischen gnd oder vcc zu messen.

nun steh ich mal wieder dumm da...

mfg
marcel

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.