www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mega 8 lässt sich beschreiben aber läuft nicht


Autor: Michael S. (michi-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
hab das problem, dass ich nen ATmega8 zwar laut PonyProg erfolgreich 
programmieren kann, aber das Programm nicht ausgeführt wird. Ich hab zum 
Testen folgenden Code verwendet:
#include <avr/io.h>  


int main(){

  DDRD = 0x04;
  PORTD = 0x04;

  while(1){
  }

  return 0;
}

nun Messe ich an PD2, aber da sind keine 5V dran.

Hab leider aus blödheit anfänglich den 7805 verdreht in die schaltung 
eingebaut und meine an VCC irgendwas mit 7V gemessen zu haben, bin mir 
aber nicht mehr so ganz sicher.

Ist der ATmega jetzt hinüber, obwohl ich ihn noch beschreiben und 
auslesen kann?

Ach ja die Fuses sind wie folgt gesetzt:

CKSEL 1
CKSEL 2
CKSEL 3
SUT 0
BOOTSZ 0
BOOTSZ 1

Sind alle programmed (=0) alle anderen sind unprogrammed, es sollte also 
der interne 1MHz tackt aktiv sein. Was aber in meinem Beispiel ja völlig 
egal ist.

Gruß,
Michi

Autor: Michael S. (michi-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahhh shit, mir ist gerade aufgefallen dass der Wiederstand von RESET 
nach VCC fehlt

Autor: Lutz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1.) Wenn das dann behoben ist und es immer noch nicht läuft, mach mal 
ein Semikolon (leeres statement) in Deine while-Schleife.
2.) Und was die angehängte Schaltung mit PORTD und PORTD2 zu tun hat, 
habe ich auch noch nicht verstanden (zumindest ist es in der Schaltung 
an Port C angeschlossen). Aber ich bin auch gerade erst aufgestanden, da 
bin ich kombinatorisch/logisch noch nicht so drauf ...

Autor: Michael S. (michi-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ner Wiederstand hats nicht gebracht, auch das Semikolon nicht.
ich hab den port D nur zum testen genommen, Port C geht genauso wenig 
:-(

aber merci schon mal für deine hilfe

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es sollte sich immer was bewegen koennen :

int main(){

  DDRD = 0xFF; // alles ausgang
  portd=0xAA;

  while(1){
   portd=0x55;
   nop();
   portd=0xAA;

  }

  return 0;

Autor: Michael S. (michi-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das brachte leider auch keinen Erfolg

Autor: Lutz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Widerstand zu RESET ist in der Schaltung auch nicht erforderlich, da 
der Pin ja gar nirgends angeschlossen ist (zumindest laut Schaltplan). 
Was (zumindest laut Schaltplan) aber auf jeden Fall an Hardware noch 
fehlt, ist ein 100 nF-Kondensator zwischen VCC und GND (=> 
"Abblockkondensator"). Und wenn das wirklich das vollständige Programm 
ist, sollte es eigentlich funktionieren.
Nur zum Testen kannst Du natürlich bei Port D bleiben, mußt dann 
natürlich auch an PD2 messen.
Mit den Fuses: Am besten noch mal alles in den Auslieferungszustand 
zurückversetzen und dann auslesen, ob es so stimmt.
Und was für den Codingstyle: Statt magic values wie z.B.
DDRD = 0x04;
lieber
DDRD = (1<<DDD2);
schreiben, das ist viel leichter zu verstehen.
Weiterhin habe ich nun gerade kein Datenblatt parat, aber hast Du bei 
dem PAckage mit VCC und VDD auch wirklich die richtigen Pins erwischt?

Autor: Michael S. (michi-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
den 100nF hab ich weggelassen, weil des 7805 genau neben dem uC liegt, 
da ist der 100nF (c3) ja eh gleich neben dem uC.

klar mess ich dann auch am PD2 wobei ich zum PC2 gewechselt hab, da kann 
man noch schöner messen.

AVCC und AGND waren nicht verbunden, hat aber auch nichts geändert die 
zu verbinden

Autor: Lutz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit den 100 nF dürfte dann in diesem Fall tatsächlich egal sein, 
da der µC hier nur einmalig schaltet. Trotzdem sollte der 100 nF für den 
µC so dicht wie möglich an den beiden Anschlußpins sitzen; und Dein 100 
nF ist für den 7805 gedacht, damit der vernünftig regeln kann und die 
Ausgangsspannung glättet. Evtl. trotzdem mal einen weiteren 100 nF 
parallel dazulegen (quasi als letzt Hoffnung).

@hacky: Was erwartest Du da bei 1 MHz Takt zu sehen im Gegensatz zu 
0xFF?
while(1){
   portd=0x55;
   nop();
   portd=0xAA;

  }
Außerdem: Wenn schon ein Portpin so nicht geht, werden 8 sich auch nicht 
anders verhalten.

Wenn der µC sich schreiben und korrekt wieder auslesen läßt, würde ich 
auch denken, daß er noch lebt.

Ich würde noch mal
- mit dem Multimeter die Platine unter Saft vorsichtig durchklingeln, ob 
an den relevanten Pins (VCC, VDD etc.) auch die erwarteten Potentiale 
anliegen
- den Mini-Code (es ist auch wirklich nur der gepostete mit dem 
Semikolon?) noch mal in eine neue Datei/Projekt kopieren, neu 
kompilieren und flashen (nachdem der Chip in den Auslieferungszustand 
versetzt wurde, ich hatte mit AVR-Studio mal so ein nicht 
reproduzierbares Problem)

Ansonsten bin ich auch ratlos. Das im Makefile das falsche Device etc. 
eingestellt ist schließe ich doch zu recht aus, oder?

Autor: Michael S. (michi-s)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
haut immer noch nicht hin, ich hab alle vcc und gnd Leitungen gemessen 
und mit Datenblatt verglichen, da ist auf allen (3 x Vcc und 3 x GND) 
das richtige Potential.
Der C3 sitzt nur 2mm vom uC weg. Momentan verwende ich eine externe 
Spannungsversorgung, schließlich will ich nicht immer mit 230V neben den 
Fingern messen.

Autor: Da Dieter (dieter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
btw.,  Das Semikolon in der Endlosschleifen hat wirklich keinen 
Einfluss. Es tut gar nix, und wird damit vom Compiler auch ignoriert. 
Ich denke, du wolltest darauf hinaus, dass der Optimierer die Schlaufe 
evtl. entfernt. Das wird er nicht tun, da das eine Änderung des 
logischen Programmablaufs wäre. Nur endliche Schleifen werden entfernt, 
wenn sie keine sichtbare Auswirkung haben.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Der Widerstand zu RESET ist in der Schaltung auch nicht erforderlich...

Natürlich muss ein Widerstand, ca. 10K, von RESET nach VCC geschaltet 
sein und besser auch noch ein 100nF von RESET gegen GND.

Dein B2 sollte auch noch einen Ladekondensator bekommen. Da reichen 
100µF.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> meine an VCC irgendwas mit 7V gemessen zu haben

Das könnte den Mega geschossen haben.

> obwohl ich ihn noch beschreiben und auslesen kann?

bist du dir sicher, dass das was du ausliest auch mit dem übereinstimmt 
was du reingeschrieben hast?

Autor: Michael S. (michi-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ich bin mir sicher, da PonyProg Verificaton macht, auch wenn ich es 
schliße und neu öffne und nur den uC auslese, kommt das richtige raus.

der 10k zwischen reset und vcc ist schon drin

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast schrieb:

> Natürlich muss ein Widerstand, ca. 10K, von RESET nach VCC geschaltet
> sein und besser auch noch ein 100nF von RESET gegen GND.

Da muss überhaupt keiner hin, denn im AVR ist bereits einer drin. Der 
hat ein bischen mehr als 10K, aber wenn man damit keine Motoren oder 
Relais schaltet langt das auch.

Autor: Michael S. (michi-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja es funktioniert nicht mit und nicht ohne, also wird der nicht das 
problem sein



wenn ich den uC wenigstens einfach von der platiene bekähme, aber ich 
hab nicht mal nen heißluft föhn da...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Oszillator hast du ausgewählt?
Wenn ext.Quarz dann prüf doch bitte mit einem Scope ob der schwingt.

Autor: Michael S. (michi-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab zum testen extra den internen ausgewählt, gleich werd ich sehn, ob 
der uC wirklich geschossen ist oder doch was anderes nicht stimmt, ich 
hab ihn grade ausgebügelt ^^ jetzt kommt der neue rein

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.