Forum: Mikrocontroller und Digitale Elektronik Controller lässt sich programmieren aber arbeitet nicht.


von MeisterLampe (Gast)


Lesenswert?

Ja ein freundliches Hallo erstmal,

und zwar wollte ich ein Programm zur Steuerung eines Stepdown Wandlers 
auf einen Mega88 aufspielen.
Als Test versuchte ich erstmal nur die PWM aufzuspielen. Die 
Programmierung und die Verifikation des Flash funktionierten 
einwandfrei. Doch er fängt einfach nicht an zu laufen.
Selbst ein einfaches Programm wie:
while(1){
DDRB = 0xFF;
PORTB = 0xFF;
PORTB = 0x00;}

funktioniert nicht.
Alle Fuses sind unverändert. Default Einstellung wurde überprüft.

Er rennt einfach nicht los.

Als Takt benutze ich den Internen Takt von 8MHz mit Teiler 8 wie im 
Default Modus.

Programmiert wird er mittels AVR Dragon und als IDE verwende ich AVR 
Studio 6.

Schonmal vielen Dank für eure Hilfe.

von Eumel (Gast)


Lesenswert?

Wie überprüfst du ob der Mega läuft oder nicht?

von MeisterLampe (Gast)


Lesenswert?

ich überprüfe mittels Oszi

von troll (Gast)


Lesenswert?

Schaltplan, speziell Resetpin?

von ??? (Gast)


Lesenswert?

Was erhoffst du dir denn von diesem Programm?

while(1){
DDRB = 0xFF;
PORTB = 0xFF;
PORTB = 0x00;}

von MeisterLampe (Gast)


Lesenswert?

Als Beschaltung habe ich mich an den Schaltplan siehe unten gehalten. 
Mal abgesehen davon dass ich halt noch Peripherie angeschlossen habe und 
der Quarz fehlt.

http://www.mikrocontroller.net/articles/Datei:Mega8_Tutorial.png


von dem Programm erhoffe ich mir eigentlich nur einen Test ob er 
überhaupt was ausgibt.

von Karl (Gast)


Lesenswert?

MeisterLampe schrieb:
> while(1){
> DDRB = 0xFF;
> PORTB = 0xFF;
> PORTB = 0x00;}

Die Ausgänge sind damit statisch auf Low.
(mal davon abgesehen, dass hier ggf etwas wegoptimiert wird)

von ??? (Gast)


Lesenswert?

Was soll es denn ausgeben? Du schreibst doch nur Nullen rein, oder sehe 
ich das falsch?

von MeisterLampe (Gast)


Lesenswert?

ja ich schreibe Nullen rein und dann wieder einsen und wieder nullen, 
oder bin ich jetzt blöd?

von ??? (Gast)


Lesenswert?

Naja...das letzte zaehlt :)

von MeisterLampe (Gast)


Lesenswert?

aber es springt doch dann wieder zum Anfang, ist doch eine Schleife

von DerDerNichtStartenWill (Gast)


Lesenswert?

MeisterLampe schrieb:
> ja ich schreibe Nullen rein und dann wieder einsen und wieder nullen,
> oder bin ich jetzt blöd?

Das ist der Unterschied zwischen C Programmierung und uC Programmierung 
;-)

von troll (Gast)


Lesenswert?

Zieh mal testhalber den Programmer ab und / oder halt das DMM an den 
Resetpin. Der muss 5V haben.

von troll (Gast)


Lesenswert?

PS: Das Programm ist schon in Ordnung, man könnte aber DDRB aus der 
Schleife nehmen (das muss man nur einmal schreiben). Wegoptimiert wird 
da gar nichts, Stichwort volatile.

von ??? (Gast)


Lesenswert?

Naja...das Programm wird von oben nach unten abgearbeitet...da müsstet 
du schon nen Delay einbauen...

von troll (Gast)


Lesenswert?

??? schrieb:
> Naja...das Programm wird von oben nach unten abgearbeitet...
ja und?

> da müsstet
> du schon nen Delay einbauen...

Nö, warum denn. Er guckt doch mit dem Oszi, das ist schnell genug.

von ??? (Gast)


Lesenswert?

Hmm, OK

von MeisterLampe (Gast)


Lesenswert?

ok man muss dazu sagen dass ich ihn oben etwas gekürzt habe:

eigentlich lautet er wie folgt:

#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 1000000UL     /* Quarz mit 3.6864 Mhz */
#endif
#include <util/delay.h>

int main( void )
{
DDRB = 0xFF;
while(1)
     {
     PORTB = 0xFF;
     _delay_ms(50);
     PORTB = 0x00;
     _delay_ms(50);
     }
    return 0;
}

von troll (Gast)


Lesenswert?

MeisterLampe schrieb:
> ok man muss dazu sagen dass ich ihn oben etwas gekürzt habe:
Grmpf! Was sollen wir den mit Code der gar nicht benutzt wird?

> #define F_CPU 1000000UL     /* Quarz mit 3.6864 Mhz */
Kommentar falsch. Außerdem gehört das ins Makefile.

Code ansich ist ok.

von MeisterLampe (Gast)


Lesenswert?

sorry der Quelltext war kurz aus dem Studio kopiert und ich Stelle fest 
das immer noch das falsche Kommentar aus dem Tutorial drin steht...

von ??? (Gast)


Lesenswert?

Aber würde es denn ganz ohne Delay oder sogar nen NOP funktionieren? Nur 
so interessehalber.

von MeisterLampe (Gast)


Lesenswert?

zuerst war es ohne, ging aber auch nicht, daher hab ich es eingebaut.

Grund war einfach nur dass ich dann eine LED zum testen verwenden kann 
und nicht immer das Oszi benutzen muss.

von Karl (Gast)


Lesenswert?

Am Programm selbst liegts nicht, habs eben mal auf nen ATmega168 
runtergeladen, soweit blinkt alles.
Studio6+STK+Dragon+ATmega168

Beschreib mal deine Hardware ...
Stromlauf?

von MeisterLampe (Gast)


Angehängte Dateien:

Lesenswert?

Das ist der Schaltplan. Als kleine Anmerkung, die beiden unbeschrifteten 
Teile sind eine Spule(oberes Teil) und ein Relais(rechtes Teil) das im 
Notfall über Benutzereingabe durchschaltet.

von (prx) A. K. (prx)


Lesenswert?

Die Beschaltung des 7805 sieht etwas sparsam auf. Keine Cs in der Nähe?

Eagle hat Symbole für Relais und Spulen. Verwende sie. Jedenfalls sieht 
der Kram auf der rechten Seite etwas eigentümlich aus.

von Uwe (Gast)


Lesenswert?

An Port B ist schonmal der Programmieradapter dran ... due stellst den 
ganzen port auf Ausgang ... bemerkt ?
und wo mißt du denn dein angeblich nicht vorhandenes Signal ? Hofentlich 
an Port B.

von Uwe (Gast)


Lesenswert?

Ich seh an Port B keine LED sondern nur an Port C un d an Port D ist 
auch was aber an Port B ist nur der ISP

von MeisterLampe (Gast)


Lesenswert?

Ja ich messe an Port B habe es aber auch schon mit Port D versucht, ohne 
Erfolg. Die LED halte ich einfach nur mit einem Bein auf den Pin. Am 
anderen Beinchen hängt ein 120ohm Widerstand.

Auch ein Messen mit dem Tastkopf vom Oszi brachte Nichts zu Tage.

von MeisterLampe (Gast)


Lesenswert?

Ja ich messe an Port B habe es aber auch schon mit Port C versucht, ohne 
Erfolg. Die LED halte ich einfach nur mit einem Bein auf den Pin. Am 
anderen Beinchen hängt ein 120ohm Widerstand.

Auch ein Messen mit dem Tastkopf vom Oszi brachte Nichts zu Tage.

von Yoschka (Gast)


Lesenswert?

Zeig uns mal einen Screenshot von den Fuse Settings.

von Jojo S. (Gast)


Lesenswert?

ist in den Projekteinstellungen der richtige µC eingestellt? Mega88 
statt Mega8?

von troll (Gast)


Lesenswert?

troll schrieb:
> Zieh mal testhalber den Programmer ab und / oder halt das DMM an den
> Resetpin. Der muss 5V haben.

von Karl (Gast)


Lesenswert?

Hast Du das ganze mal debugged?

von MeisterLampe (Gast)


Lesenswert?

Vielen Dank schonmal für eure Hilfe, aber leider geht es noch immer 
nicht.

Fusesettings poste ich nachher wenn ich Zeit habe, da ich gerade noch in 
der Uni bin.

Der richtige uC ist eingestellt, mehrmals überprüft.

Resetpin hat auch 5V.

von MeisterLampe (Gast)


Lesenswert?

Ein Debuggen ist leider nicht möglich, da kein JTAG vorhanden.

von B e r n d W. (smiley46)


Lesenswert?

Hast Du mal die Betriebsspannung und die Reset-Spannung nachgemessen, am 
Besten mit dem Oszi? Liegen da wirklich saubere 5 Volt?

7805 benötigen am Eingang mindestens 0,33µF, sonst neigen sie zum 
Schwingen (siehe Datenblatt).

PS
> Resetpin hat auch 5V.

Das hat sich leider überschnitten, aber trotzdem.

von Dietrich L. (dietrichl)


Lesenswert?

@MeisterLampe

Was mir noch einfällt:
- Hast Du den µC schon mal gewechselt? Vielleicht ist er ja kaputt...
- Schaltungsfehler? Kurzschluss / Unterbrechung?
- Problem mit den 5V? Schwingen, Störungen? Vielleicht durch den 
Leistungsteil?

Gruß Dietrich

von Karl (Gast)


Lesenswert?

MeisterLampe schrieb:
> auf einen Mega88 aufspielen.
MeisterLampe schrieb:
> Programmiert wird er mittels AVR Dragon und als IDE verwende ich AVR
> Studio 6.
MeisterLampe schrieb:
> Ein Debuggen ist leider nicht möglich, da kein JTAG vorhanden.

Warum, ist doch alles da, Studio6, Dragon und Mega88 (mit debugwire) ...

von MeisterLampe (Gast)


Lesenswert?

ja theoretisch könnte ich debuggen bzw. einen anderen Controller 
verwenden, nur leider ist schon alles auf Platine und da habe ich aus 
Platzgründen nur einen 6 Pin Stecker verbaut.

Ich möchte jetzt eigentlich nicht den Controller auf gut Glück 
runterlöten und einen neuen drauf, ist halt tqfp32 und somit nicht meine 
Lieblingsbeschäftigung.

von Thomas E. (thomase)


Lesenswert?

MeisterLampe schrieb:
> ur leider ist schon alles auf Platine und da habe ich aus
> Platzgründen nur einen 6 Pin Stecker verbaut.
Und genau darüber läuft auch Debug-Wire. Lies dir mal die Anleitung vom 
Dragon sowie das Kapitel "Debug wire" im Datenblatt durch.

http://www.atmel.no/webdoc/avrdragon/avrdragon.html

mfg.

von MeisterLampe (Gast)


Lesenswert?

So jetzt läuft er. Woran es lag kann ich leider nicht sagen. Könnte 
jedoch am Dragon gelegen haben, da ich jetzt ein STK 500 benutzt habe.

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.