Forum: Mikrocontroller und Digitale Elektronik einfaches Blinken LED


von Marc (Gast)


Lesenswert?

Hallo,
ich möchte zunächst einfach eine LED blinken lassen, doch da passiert 
nichts.
1
#include <avr/io.h>
2
#ifndef F_CPU 
3
#define F_CPU 1000000UL
4
#endif
5
#include <avr/delay.h>
6
7
int main(void)
8
{
9
  DDRB  = 0xff;
10
    while (1) 
11
    {
12
        PORTB |= (1<<PB1);    //Bit setzen
13
        _delay_ms(500);       // halbe sekunde warten
14
        PORTB &= ~(1<<PB1);   // Bit loeschen
15
        _delay_ms(500);       // halbe sekunde warten
16
    }
17
}

Der Controller hat einen 8Mhz Quarz. Die Fuses sind:
Low: 0x62
High: 0xDF
Extended Action 0xFF
Die LED ist an PB1 angeschlossen. Der Code sollte ja so richtig sein. 
Wollte mit dem Blinken, die eingestellte Quarzfrequenz ermitteln. Aber 
da gar nichts blinkt, stehe ich nun da und komme nicht weiter.
ist F_CPU richtig definiert? oder Muss ich die Fuses noch ändern? Oder 
liegt der Fehler noch woanders?

Marc

von Heinz V. (heinz_v)


Lesenswert?

Marc schrieb:
> PORTB &= ~(1<<PB1);   // Bit loeschen

Bist Du sicher das hier gelöscht wird? (da steht eine 1 und keine 0)

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Schaltung wäre nicht schlecht...

von Marc (Gast)


Lesenswert?

Heinz V. schrieb:
> Bist Du sicher das hier gelöscht wird

Ja, '&= ~'

von Ralph S. (jjflash)


Lesenswert?

... und welcher Controller ist das?

von Marc (Gast)


Lesenswert?

Ralph S. schrieb:
> ... und welcher Controller ist das?

Das ist ein ATTiny45 (habe ich oben vergessen zu erwähnen)

Knut B. schrieb:
> Schaltung wäre nicht schlecht..

erstelle ich gerade

von Oliver J. (skriptkiddy)


Lesenswert?

Wir beim Kompillieren der richtige Controller mit angegeben?

Grüße Oliver

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Marc schrieb:
> #define F_CPU 1000000UL

Marc schrieb:
> Der Controller hat einen 8Mhz Quarz.

Ich vermisse oben eine 8 oder unten eine 1.

Trotzdem sollte das Konstrukt blinken. (sofern |= verodern und &= ~ 
verunden mit Komplement)
Ist die LED noch am Leben??
Vorwiderstand für die LED, wie groß?
Spannungsversorgung des ATtiny45, Puffer/Abblockkondensatoren?
Reset beschaltet? (wobei Das bisher immer lief ... leise pfeifend umdreh 
und weg geh ...)

MfG

von Marc (Gast)


Angehängte Dateien:

Lesenswert?

Anbei den Schaltplan

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

5V 10kΩ -> 5:10000 = 0,0005A -> 0,5mA

Sicher, daß die LED da überhaupt was sagt?

MfG

PS: Ok, bei low current - aber eine 'Normale' mit nominal 20mA könnte 
bei <1mA schon recht dunken 'hell' sein.

http://www.elektronik-kompendium.de/sites/bau/1109111.htm
http://www.leds.de/Widerstandsrechner/

(gibt's hier in den Grundlagen bestimmt auch was zu)
Jupp:
https://www.mikrocontroller.net/articles/LED

: Bearbeitet durch User
von Marc (Gast)


Lesenswert?

Patrick J. schrieb:
> 5V 10kΩ -> 5:10000 = 0,0005A -> 0,5mA

Oh, kopierfehler. Der Widerstand bei der LED hat 3kOhm.
Wenn ich direkt 5V dran halte, leuchtet diese normal (also gut 
erkennbar)

von Wolfgang (Gast)


Lesenswert?

Patrick J. schrieb:
> Ich vermisse oben eine 8 oder unten eine 1.

Das musst du jetzt mal erklären.

Der Quarz hat 8MHz, der Vorteiler ist 8.
Wenn ich die entscheidende Mathestunde nicht verpennt habe, bedeutet das 
einen Takt von 1MHz und genau das ist im Programmcode angegeben.

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Hast Du ggf. den ATtiny dabei gegrillt?
Sprich: Der tiny stand auf OUT,low und Du hast 5V drauf gegeben?

Andere Idee: Du hast im Schaltplan einen Quarz(?) - darfst Du dann ddrb 
komplett auf OUT schalten?
Schwingt dann der Quarz noch?

Ohne Takt kein Programmablauf.

MfG

Melde mich für heute ab ;)
PS: sorry, so dringend hatte ich 'Es' noch nicht, daß ich die fuses 
auswenig gelernt hätte - dann geht dieser Fehler wohl zu mir.
PPS: bei mir muß ich Win in der VB starten, um die fuses 'anzuschauen' - 
gibt wohl bestimmt auch online eine Übersicht - wie geschrieben, den 
Fehler lasse ich gerne bei mir!

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Patrick J. schrieb:
> PS: sorry, so dringend hatte ich 'Es' noch nicht, daß ich die fuses
> auswenig gelernt hätte

Die braucht man nicht auswendig zu lernen. Tante Google führt einen 
innerhalb von Sekunden auf passende Online Fuse Rechner.

http://www.engbedded.com/fusecalc/

von Walter S. (avatar)


Lesenswert?

Marc schrieb:
> Der Controller hat einen 8Mhz Quarz. Die Fuses sind:
> Low: 0x62
> High: 0xDF
> Extended Action 0xFF

das ist der interne Oszillator mit 8Mhz und Teiler 8

von Marc (Gast)


Lesenswert?

Walter S. schrieb:
>> Der Controller hat einen 8Mhz Quarz. Die Fuses sind:
>> Low: 0x62
>> High: 0xDF
>> Extended Action 0xFF
>
> das ist der interne Oszillator mit 8Mhz und Teiler 8

So waren diese eingestellt. Der Controller war ganz neu.
habe die Low auf 0x6E umgestellt, jetzt kann ich den Controller aber 
nicht mehr flashen und die Fuses nicht mehr ändern.
Ich bekomme den Fehler
Failed to enter programming mode. ispEnterProgMode: Error status 
received: Got 0xc0, expected 0x00 (Command has failed to execute on the 
tool), ModuleName: TCF (TCF command: Device:startSession failed.)
Das ganze habe ich mit einem Diamex Prog-S gemacht. Werde jetzt auch ins 
bett gehen und morgen weiter gucken. Vielen dank aber für eure hilfe 
bisher.

von Dennis K. (scarfaceno1)


Lesenswert?

Ab Werk läuft er ja mit internen 8MHz.
Jetzt willst du ihn mit ext 8MHz betreiben.

Auf deinem Schaltplan kann ich sehen, dass der Quarz zwischen PB2 und 
PB3 hängt.
Laut Datenblatt für den Attiny45 müsste der aber zwischen PB3 und PB4

Also bekommt er im Moment keinen Takt und kann nicht angesprochen 
werden...
Überprüfe das mal.

: Bearbeitet durch User
von Winfried M. (win)


Lesenswert?

Ich würde ja auch erstmal einen Test mit internem Taktgeber machen. Dann 
hast du eine Fehlerquelle ausgeschlossen.

von S. R. (svenska)


Lesenswert?

Ich würde ja erstmal die Delays von 500ms auf 50ms reduzieren. Wenn die 
Taktfrequenz nicht stimmt, dann glaube ich oft, es funktioniere nicht, 
obwohl es einfach nur extrem langsam läuft.

Einen halbsekündlichen Blinker (obwohl ich "sehr schnell" erwarte) 
bemerke ich, aber 5 Sekunden starre ich da nicht drauf.

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.