Forum: Mikrocontroller und Digitale Elektronik einfaches Blinken LED


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Marc (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-5 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht lesenswert
Schaltung wäre nicht schlecht...

von Marc (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Heinz V. schrieb:
> Bist Du sicher das hier gelöscht wird

Ja, '&= ~'

von Ralph S. (jjflash)


Bewertung
0 lesenswert
nicht lesenswert
... und welcher Controller ist das?

von Marc (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Wir beim Kompillieren der richtige Controller mit angegeben?

Grüße Oliver

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


Bewertung
0 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht lesenswert
Anbei den Schaltplan

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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von S. R. (svenska)


Bewertung
0 lesenswert
nicht 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.

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]
  • [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.