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