Forum: Mikrocontroller und Digitale Elektronik Problem mitATMega16 und schaltung1 aus tut


von Andy (Gast)


Lesenswert?

Hallo,

ich habe folgendes Probelm: Also ich habe den Mega16 und habe ihn in
die versuchsplatine(die ausm shop) gesteckt! Zwichen GND und Vcc liegen
5Volt an. Nun wollte ich das mit den LED's aus dem Tut ausbrobieren
und habe das Beispielprogramm in den Mega16 geladen. nur leider liegt
zwich PB0 und VCC 0 Volt(200mv) an was mich aber wundert ist das
zwichen PB0 und GND ungefähr 4Volt spannung anliegt!

Wäre euch echt dankbar wenn mir jemand sagen könnte was ich Falsch
gemacht habe! Ich habe auch das Program aus dem Tut mal im AVR-Studio
Debuged und bis zur Enlos-Schleife funktioniert auch alles super aber
dann wird PB4 0 und PINB0-7 wird 1

Also ich versteh gar nix mehr und hoffe das mir jemand helfen kann!!

Mfg Andy

von Conlost (Gast)


Lesenswert?

Hallo Andy,

hast du das Programmm abgeändert auf Mega16?
Im Programm steht:
.include "4433def.inc"
das must du ändern in:
.include "m16def.inc"

Wann liegen die von dir genannten Spannungen an?

Gruß,
Arno

von Andy (Gast)


Lesenswert?

Ja ich habe die Include datei geändert! naja nachdem ich diese Prog aus
dem tut mit geänderter includedatei auf den Mikroconntroller übertragen
hat liegt zwich PB0 und vcc 0 Volt was ja normalerweise nicht sein
sollte sondern 5V oder??

mfg Andy

von Andy (Gast)


Lesenswert?

ach ja was ich noch sagen wollte ist das zwichen PB1 und vcc auch 0 Volt
ist obwohl ja nach dem Programm dort genauso 5 V anliegen sollten

von Jens Renner (Gast)


Lesenswert?

Ähm... normalweise werden die Spannungen gegen GND gemessen.
Dann werden Dir auch 5 V angezeigt.

von Conlost (Gast)


Lesenswert?

Hallo,

man mißt Spannungen eigentlich gegen Masse bzw GND und nicht
gegen Plus 5 Volt.

Ich nehme an du meinst dieses Programm.
----------------------------------------------------------------
 .include "m16def.inc"       ;Definitionsdatei einbinden,
         ldi r16, 0xFF       ;0xFF ins Arbeitsregister r16 laden
         out DDRB, r16       ;Inhalt von r16 ins IO-Register DDRB
ausgeben

         ldi r16, 0b11111100 ;0b11111100 in r16 laden
         out PORTB, r16      ;r16 ins IO-Register PORTB ausgeben

ende:    rjmp ende           ;Sprung zur Marke "ende"
-----------------------------------------------------------------

In diesem Programm wird zuerst PortB als Ausgang definiert.
Dann wird PortB Bit-0 und Bit-1 auf Null gesetzt.

Dadurch werden diese Ausgangspins gegen Masse gezogen und
die LED welche über einem Widerstand an *5Volt geschaltet
ist sollte leuchten.

Gruß,
Arno

von Andy (Gast)


Lesenswert?

ja genau das Programm ^^

Also nur noch mal verständnisshalber, wenn also PORTB Bit-0 NULL ist
dann sollte zwichen PORTB Bit-0 und vcc 5 VOLT anliegen? Weil PortB ist
dann Masse? Wenn ich das Mache dan leuchtet nix?wenn ich aber an gcc
und GND anschließe dann leuchtet die LED(was also bedeutet das die LED
funktioniert und die Spannung auch da ist) Sollte ich was falsch
verstehen dann klärt mich doch butte nochmal auf

Mfg Andy

von Andy (Gast)


Lesenswert?

Achso un wenn ich zwich PortB bit-1 und GND MESSE dann sind dort 4,07
Volt

von Conlost (Gast)


Lesenswert?

Hast du die Diode richtigherum gepolt?
Die Kathode an den Port, die Anode an den Widerstand,
Den Widerstand an +5 Volt.

von Andy (Gast)


Lesenswert?

Ja hab ich! Ich denke das das ein Software fehler ist, aber ich weis es
nicht, nur eigentlich kann es nicht sein es müsste gehen!

Also wenn ich den conntroler Zurücksetze also nix im Flash ist bzw
alles FF dann ist der selbe zustand wie wenn ich das Programm in den
Flash geladen Habe

Ich versteh gar nix

von Conlost (Gast)


Lesenswert?

Hmmm.. wenn das programmieren geht, dann sollte das Programm auch
laufen, denn so kompliziert ist es js nicht. :-)

Also nochmal bei laufendem Programm messen:
1. Messgerät Minusstrippe an Masse und dort lassen
2. Plus-Strippe an PortB0        ; sollte nahezu Null Volt sein
3.    "     "   an PortB1        ; sollte Nahezu Null Volt sein
4.    "     "   an PortB2 bis B7 ; sollte nahezu +5 Volt sein
5. Led an PortB0 über 1k Widerstand an +5V ; sollte leuchten

Funktioniert das so?

von Andy (Gast)


Lesenswert?

Ok ich hab das jetzt gemacht!

1. Messgerät Minusstrippe an Masse und dort lassen
2. Plus-Strippe an PortB0        ; zeigt 4.07 VOLT
3.    "     "   an PortB1        ; zeigt 0.407 VOLT
4.    "     "   an PortB2 bis B7 ; zeigt 0.407 VOLT

Mfg Andy

von Conlost (Gast)


Lesenswert?

Nun das gleiche mal bitte ohne Programm messen.

von Andy (Gast)


Lesenswert?

Hallo,

OK hab ich gemacht und da wird genau das selbe angezeigt....ich hoffe
doch nicht das das ding Kaputt ist

Mfg Andy

von Andy (Gast)


Lesenswert?

Achso ich habe die Fuse-Bits so gesetzt wie es für den Amtel 8 im Tut
angegeben ist. Vieleicht ist da was falsch!

Mfg Andy

von Conlost (Gast)


Lesenswert?

Hallo,

bin wieder da.
Ja leider ist da was falsch, du hast die CKSEL3..0 alle auf Null
gesetzt und das bedeutet externer Takt.
Diese Fusebits hättest du alle auf 1 setzen müssen für
externen Quarz.

Du hast im Moment keinen Takt, also kannst du nicht umprogrammieren.
Dazu brauchst du einen externen Oszillator, dieser muß an
XTAL1 angeschlossen werden.
Der Quarz auf deiner Platine muß dazu vorübergehend entfernt werden.
Hast du einen Quarzoszillator oder irgend eine Möglichkeit einen
Takt zu erzeugen?
Ein NE 555 Timer-IC oder einen Frequenzgenerator?

Die Frequenz braucht nicht genau zu sein nur so ca. 1 Mhz.

Gruß,
Arno

von Andy (Gast)


Lesenswert?

Guten morgen,

na das sind ja keine Guten nachrichten. Ja ich kann sicherlich nen 1Mhz
Takt erzeugen. Hab auf Arbeit nen Funktionsgenerator. Naja also ich
werd das mal machen. Und ich dachte das ist wie beim Amtel 16. Naja
sollte mir vieleicht mal das Datenblat anschauen ;-)

Danke für eure Hilfe!

@Conlost kannst du mir vieleicht deine E-mail adresse geben?

Mfg Andy

von Conlost (Gast)


Lesenswert?

Hallo Andy,

gestern hatte ich wohl einen ganz schlechten Tag, da hat mir jemand
einen C-Code untergejubelt, davon bekomme ich immer Kopfschmerzen
und einen Knoten im Hirn. :-)

Ich habe mir das alles nochmal angeschaut und festgestellt, das ich
da etwas durcheinandergekommen bin.
Im Tutorial wird im Text gesagt, das die Fusebits auf externen
Oszillator eingestellt werden sollen. Auf dem Schaltbild ist ja
auch ein externer Oszillator eingezeichnet.
Bei den Yaap Beispielen ist aber zuerst gezeigt wie die Einstellung
für internen RC-Oszillator aussieht und dann wie eingestellt
werden soll.
Diese Einstellung ist aber nicht für einen externen Oszillator,
sondern für einen externen Quarz.
Also genau das was du ja auf deiner Platine hast.

Die Frage ist nun aber, konntest du diese Einstellung vornehmen,
oder ging das nicht weil an deiner Schaltung schon ein Quarz mit
den beiden Kondensatoren angeschlossen war.

Um das festzustellen könntest du mal den Quarz und die Kondensatoren
entfernen, dann könnte der interne RC-Oszillator wieder arbeiten,
falls die Einstellung noch die Werksseitige ist.
Ich hoffe, das ich nun nicht zuviel Verwirrung gestiftet habe.

Gruß,
Arno

P.S. e-mail siehe oben

von Andy (Gast)


Lesenswert?

Na Nu bingrad nach hause gekommen und wolte das ausprobieren doch nun
kom ich gar nicht mehr drauf...."init failed....." ich hatte heute
früh die fuse-bits CKSEL3..0 auf 1 gesetzt. da ging aber noch alles..
und als ich eben zurückgekommen bin und anschalte da kann ich nicht
mehr connecten! was denn nun??

Mfg Andy

von Conlost (Gast)


Lesenswert?

Hallo,

bin auch grade eben nach hause gekommen.
Heißt das, du hast die Fusebits so gesetzt wie im Tutorial
auf dem zweiten screenshot zu sehen ist?
Also CKSEL3...0 ohne Häkchen und danach ging alles?

Gruß,
Arno

von Andy (Gast)


Lesenswert?

Ja das habe ich und da konnte ich noch sachen aud den micK schieben doch
jetzt nach dem ich nach hause gekommen bin komt alst immer der fehler

Andy

von Andy (Gast)


Lesenswert?

ahm wart mal mein vorhergehendes Post is falsch

"Heißt das, du hast die Fusebits so gesetzt wie im Tutorial
auf dem zweiten screenshot zu sehen ist?
Also CKSEL3...0 ohne Häkchen und danach ging alles?"

Also ich habe es so gesetzt wie du es gesagt hattest "Diese Fusebits
hättest du alle auf 1 setzen müssen für
externen Quarz." Naja und als ich nach hause kamm ging nix mehr

von Andy (Gast)


Lesenswert?

Also um mal nen bissle klarheit reinzubringen ich benutze yaap und wenn
ich in obrigen Post meinte 1 dann meinte ich das das Kästchen Markiert
ist also Schwarz!

nicht das wir noch aneinander vorbei reden :-)

Mfg Andy

von Conlost (Gast)


Lesenswert?

Hallo,

da haben wir wohl aneinander vorbei geredet.
Aber das bekommen wir noch hin, ich gebe nicht so schnell auf. :-)

Du hast also CKSEL3...0 angeklickt, das bedeutet du hast diese
Fuses gesetzt.
Eine gesetzte Fuse bedeutet aber, sie ist auf NULL gesetzt.
Eine gelöschte bzw nicht gesetzte Fuse ist EINS.
CKSEL "0000" bedeutet externer Oszillator.
Deshalb geht nun nix mehr.
Also Quarz und Kondensator von Pin XTAL1 entfernen und einen
externen Takt an den XTAL1 Pin anlegen.
Dann in Jaap alle Häkchen wieder wegnehmen von CKSEL3..0 wie auf
dem zweiten screenshot abgebildet und programmieren.
Damit hast du auf externen Quarz eingestellt.
Den Quarz und den Kondensator wieder an XTAL1 löten und damit
sollte es dann wieder gehen.
Ob dein Programm dann läuft, werden wir dann sehen.

Gruß,
Arno

von Andy (Gast)


Lesenswert?

Ok dann werd ich das machen....kan aber nen paar tage dauern weil ich
zur zeit nicht auf arbeit bin. Aber ich werd dann mal zu enm Freund
gehen vieleicht hat der einen zuhause....

Danke für deine Hilfe

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.