mega 8 lässt sich beschreiben aber läuft nicht

OP #1449962
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:
1
#include <avr/io.h>  
2

3

4
int main(){
5

6
  DDRD = 0x04;
7
  PORTD = 0x04;
8

9
  while(1){
10
  }
11

12
  return 0;
13
}

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
Angehängte Dateien:
Gast
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 ...
Gast
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.
1
DDRD = 0x04;
lieber
1
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?
OP
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
Gast
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?
OP
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.
Angehängte Dateien:
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.
Gast
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.
Gast
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?
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.