Forum: Mikrocontroller und Digitale Elektronik 1637-LED arbeitet nicht wie erwartet


von Thomas G. (Firma: Frickelhauptquartier) (taximan)


Angehängte Dateien:

Lesenswert?

Moin,
ich hab mir einige LED-Module 1637 besorgt und an den Attiny 45 
angeschlossen. Das Programm (hier aus dem Forum) als solches 
funktioniert, aber viel zu schnell. Wenn ich CKDIV8 setze läuft das 
Programm in etwa mit der passenden Geschwindigkeit. (der Attiny läuft 
dann auch nachgemessen mit 1MHz; sonst mit ca 8,3 MHz) Ich frage mich, 
wie das kommt. Hat einer eine Idee?

Thomas

von g457 (Gast)


Lesenswert?

> Wenn ich CKDIV8 setze läuft das Programm in etwa mit der passenden
> Geschwindigkeit.

Wenn Du mit "setzen" "unprogrammed" meinst so wie im Screenshot, dann 
läuft die Mühle mit grob 8MHz und das F_CPU-Define im selben Screenshot 
passt dazu.

HTH

von Karl M. (Gast)


Lesenswert?

Thomas G. schrieb:
> Moin,
> ich hab mir einige LED-Module 1637 besorgt und an den Attiny 45
> angeschlossen. Das Programm (hier aus dem Forum) als solches
> funktioniert, aber viel zu schnell. Wenn ich CKDIV8 setze läuft das
> Programm in etwa mit der passenden Geschwindigkeit. (der Attiny läuft
> dann auch nachgemessen mit 1MHz; sonst mit ca 8,3 MHz) Ich frage mich,
> wie das kommt. Hat einer eine Idee?
>
> Thomas

Hallo Thomas,

In deinem Bild von einem möglichen Programm, das weiß aber keiner, ist 
die erste Zeile F_CPU 8MHz ` ` UL und ob das so sein soll?

von Thomas G. (Firma: Frickelhauptquartier) (taximan)


Lesenswert?

g457 schrieb:
>> Wenn ich CKDIV8 setze läuft das Programm in etwa mit der passenden
>> Geschwindigkeit.
>
> Wenn Du mit "setzen" "unprogrammed" meinst so wie im Screenshot, dann
> läuft die Mühle mit grob 8MHz und das F_CPU-Define im selben Screenshot
> passt dazu.
>
> HTH

Genau in der Einstellung wie abgebildet läuft das Werk zu schnell. Haken 
= Ckdiv aktiviert, oder?

: Bearbeitet durch User
von g457 (Gast)


Lesenswert?

> Genau in der Einstellung wie abgebildet läuft das Werk zu schnell.

Compilerparameter prüfen und zeigen (sollten irgendwo im Buildlog 
auftauchen), ggf. ein #ifdef-F_CPU-#error einbauen, gesamten Code 
zeigen.

von Thomas G. (Firma: Frickelhauptquartier) (taximan)


Lesenswert?

Ok, mache ich heute Abend

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

@Thomas G.:

der Betreff dieses Threads lautet "1637-LED arbeitet nicht wie erwartet"

--> Was genau an der LED funktioniert denn nicht? NAch dem was du 
beschreibst, geht es ja nicht um die LED (oder deren Treiber etc) als 
solches, sondern um den steuerndern uC, der sich irgendwie unerwartet 
verhält.

Es geht mir nicht so sehr ums "oberlehrerhafte". Mit einen "falschen" 
Betreff lockst du abermöglicherweise die falschen oder nicht die 
richtigen Leser zu deinem Thread hin

: Bearbeitet durch User
von Thomas G. (Firma: Frickelhauptquartier) (taximan)


Angehängte Dateien:

Lesenswert?

Hier nun wie versprochen, das C-File.
@ Wegstaben V.;
die Ansteuerung besagten Moduls mittels eines Attiny45 liefert nicht die 
erwarteten Ergebnisse.

von Stefan F. (Gast)


Lesenswert?

Ich meine mich schwach zu erinnern, dass die _delay_ms() Funktion einer 
früheren avr-libc Version nicht beliebig lange pausieren konnte.

https://www.microchip.com/webdoc/AVRLibcReferenceManual/group__util__delay_1gad22e7a36b80e2f917324dc43a425e9d3.html

"The maximal possible delay is 262.14 ms / F_CPU in MHz"

und

"When the user request delay which exceed the maximum possible one, 
_delay_ms() provides a decreased resolution functionality"

Aber dieser zweite Teil war nicht immer drin.

Rediziere dein programm mal auf das absolute Minimum, wo eine einzelne 
LED an PB0 einfach nur blinkt. Etwa:
1
#define F_CPU 8000000UL
2
#include <util/delay.h>
3
#include <avr/io.h>
4
5
int main()
6
{
7
    DDRB = 1;
8
    for (;;)
9
    {
10
        PORTB = 1;
11
        _delay_ms(1000);
12
        PORTB = 0;
13
        _delay_ms(1000);
14
    }
15
}

Stimmen die Zeiten dann (1s an, 1s aus)?

von Thomas G. (Firma: Frickelhauptquartier) (taximan)


Lesenswert?

Sorry für die späte Antwort, ich lag darnieder.

Ja, die Zeiten stimmen.

von Stefan F. (Gast)


Lesenswert?

Thomas G. schrieb:
> Ja, die Zeiten stimmen.

Das heisst, das die _delay_ms() Tutu, was sie soll. Die Fuses und der 
Quarz funktionieren korrekt.

Dann kann es sich also wohl nur noch um einen Fehler in deiner 
Programmlogik handeln. Taste dich da schrittweise heran. Reduziere das 
Programm auf immer weniger, bis der Fehler verschwindet.

von Thomas G. (Firma: Frickelhauptquartier) (taximan)


Lesenswert?

Mit der Zeile funktioniert es; Vielleicht war eine Null oder Leerzeichen 
zuviel.
#define F_CPU 8000000UL

Danke erst mal.

von Stefan F. (Gast)


Lesenswert?

Thomas G. schrieb:
> Mit der Zeile funktioniert es; Vielleicht war eine Null oder Leerzeichen
> zuviel.
> #define F_CPU 8000000UL

Vorher stand da genau das gleiche im Anhang vom Beitrag #5846501:
> #define F_CPU 8000000UL

Warum hat es denn damit nicht funktioniert? Das verstehe ich nun nicht.

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.