Forum: Mikrocontroller und Digitale Elektronik Fehler am ATMEGA88 + LED --> Keine Funktion


von Sebastian (Gast)


Lesenswert?

Hallo

Ich habe einen ATMEGA88 mit VCC + GND versehen.
Dann habe ich die Programmer Pins angeschlossen.
das ganze läuft mit 3,3 volt.

nun eine LED von 3,3V über 300 Ohm an PB0.
LED Leuchtet jetzt schon.

das der Code dazu:


#include <avr/io.h>
#include <stdio.h>
#include <inttypes.h>
#ifndef F_CPU
#define F_CPU 8000000UL     /* Internal Quarz 8 Mhz*/
#endif
#include <util/delay.h>

int main()
{
  DDRB = 0b11111111; //Port B alle = Ausgang
while(1)
{
   _delay_ms (1000);
   PORTB |= (1<<PB0);
   _delay_ms (1000);
   PORTB &= ~(1<<PB0);
}
}

LED leuchtet aber immer noch dauernd. Kein blinken.
Warum die einfache Schaltung ?
Ich habe vorher mit den fuses in WINAVR gespielt.

BOOTSZ = 1024 adresse $0C00
Bootrst = off
RSTDISBL = off
DWEN = off
SPIEN = kleines Symbol
WDTON = off
EESAVE = off
BODLEVEL = disable
CKDIV8 = on
CKOUT = on
SUT_CKSEL = Intern 8Mhz

Programieren geht wunderbar. aber ich habe das gefühl der Code startet 
nicht. oder er schwinkt nicht.

ich habe schon mehere port pins probiert. alle das gleiche problem.

hat jemand eine idee
wie kann ich den MEGA88 wiederbeleben oder TESTEN ???

grüße
Sebastian
Stuttgart

von Oliver J. (skriptkiddy)


Lesenswert?

Da ckdiv8 aktiviert ist, hast du einen Takt von 8MHZ / 8.

Das würde bedeuten, dass dein Blinken 8 mal so lange dauert wie geplant.
Eventuell liegt es daran.

Gruß Skriptkiddy

von reimann (Gast)


Lesenswert?

.include "m88def.inc" vergessen?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Sebastian schrieb:

> nun eine LED von 3,3V über 300 Ohm an PB0.
> LED Leuchtet jetzt schon.

Das ist richtig. Deine LED ist active low angeschlossen. LOW am PB0 
lässt die LED leuchten. LOW am PB0 hast du unmittelbar nachdem du PB0 
(genauer -- alle Pins an PORTB -- warum?) per DDRB auf Ausgang gestellt 
hast.

> #define F_CPU 8000000UL     /* Internal Quarz 8 Mhz*/
> _delay_ms (1000);
> CKDIV8 = on

Wie lange wartest du auf das Blinken? Länger als 8s?

Ich denke dein Atmega8 läuft bei diesen Einstellungen (CKDIV8 = on) 
nicht mit 8 MHz sondern mit 1 MHz.

Entferne den F_CPU Teil aus dem Quellcode und setze F_CPU korrekt in AVR 
Studio bei den Projektoptionen oder im Makefile. Optimierung anschalten. 
Achte auf Fehlermeldungen und Warnungen beim Kompilieren.

von Sebastian (Gast)


Lesenswert?

Nur kurze Antwort vom iPhone:

Danke fuer die antworten. Die Led war länger als 1 Stunde an. Ich habe 
den Code mehrfach geändert. Warum ich das mit der LED gemacht habe war 
nur zum testen. Das eigentliche Projekt ging auch nicht. Deshalb jetzt 
ganz einfach mit LED.

Ich werde das dann gleich alles mal testen.

Und mich wieder melden.

Gruesse
Sebastian

von Sebastian (Gast)


Lesenswert?

Hey DANKE !!!

also in WINAVR war noch ATMEGA128 eingestellt. Aber das war nicht der 
Fehler. Der Fehler lag in den Fuses:

CKDIV8 = on
CKOUT = on

ist falsch. Das CKDIV8 auf off und es geht noch immer nicht. aber dann 
das CKout = off und schon blinkt alles ...

super DANKE

was auch immer CKOUT ist ...

GRüße
Sebastian

von Peter D. (peda)


Lesenswert?

Sebastian schrieb:
> was auch immer CKOUT ist ...

Verrät einem ganz einfach das Datenblatt.

Hint:
In PDFs darf man nach CKOUT suchen lassen.


Peter

von xurpcha (Gast)


Lesenswert?

Stefan B. schrieb:
> Entferne den F_CPU Teil aus dem Quellcode und setze F_CPU korrekt in AVR
> Studio bei den Projektoptionen oder im Makefile. Optimierung anschalten.
> Achte auf Fehlermeldungen und Warnungen beim Kompilieren.

Das ist ein sehr blöder Ratschag, F_CPU sollte schon da stehen.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Es gibt keine Notwendigkeit, dass F_CPU an dieser Stelle in dieser Weise 
definiert wird. Die zur Definition von F_CPU vorgesehenen Stellen sind 
ausreichend, gut dokumentiert und allgemeiner Usus.

Es gibt mehr Nachteile als Vorteile, wenn man F_CPU nicht an den 
vorgesehenen Stellen und vor allem auf diese Weise definiert.

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.