Forum: Mikrocontroller und Digitale Elektronik ATtiny25 PWM ADC


von Michael (Gast)


Lesenswert?

Hallo zusammen,

ich versuche gerade eine LED Lampe mittels ATtiny25 zu steuern. Die 
Platine mit Treibern ist soweit fertig, nur das Programm für den tiny 
fehlt mir und das will nicht so wie ich mir das vorstelle (ist auch mein 
erster Versuch mit nem µC).

Als Erstes möchte ich PB2 und PB3 als Ausgänge deklarieren und mittels 
PWM (die LEDs) dimmen.
Später soll mal ein Taster an den PB1 angeschlossen werden, über den ich 
die LED ein- bzw. ausschalten kann. Zum dimmen soll ein Poti an PB4 als 
ADC:

Da ich bisher noch nichts ans laufen bekommen habe, fange ich mal ganz 
oben an:

- Reicht es, wenn ich die Bibliotheken <avr/io.h> ; <avr/interrupt.h> 
und <util/delay.h> lade?

- evtl. habe ich schon mal die Ausgänge gesetzt, aber da lagen nur ~1.3V 
an, wäre das richtig (bei Vcc = 5V)? Inzwischen ist das Programm soweit 
verändert, dass es auch nicht mehr läuft.

- wie setzt man einen einzelnen Ausgang und wie bekomme ich da ein 
PWM-Signal drauf?

- muss das in eine (Leer)schleife, damit es läuft?

Das Datenblatt hab ich zwar, aber geholfen hat´s noch nicht. Das 
AVR-Tutorial habe ich auch schon gemacht, aber iwie klappts trotzdem 
nicht.

Das ganze wollte ich in AVR Studio erstellen und über einen USB-ISP 
Programmer auf den tiny bekommen. Die Verbindung dahin hat zumindest 
schon geklappt.

Würde mich sehr über eure Tipps freuen, da ich da schon längere Zeit 
dran sitze.

Viele Grüße

Michael

von Andreas K. (derandi)


Lesenswert?

Gesetzte Ausgänge sollten doch schon 5V haben, scheint also noch mehr zu 
fehlen.
Aber wenn du uns nicht zeigen willst was genau du zusammengeschrieben 
hast wird dir niemand wirklich helfen können/wollen.

von Michael (Gast)


Lesenswert?

Danke für die schnelle Antwort.
Hier ein Versuch, nur einen Ausgang (PB1) mit nem Timer auszugeben, aber
das geht auch noch nicht.

***********************************************************
#include <avr/io.h>;
#include <avr/interrupt.h>;
#include <util/delay.h>;


int main(void)

{

DDRB = (1<<PB1); //PB1 als Ausgang

TCCR0A = (1<<COMPB1) | (1<<WGM01) | (1<<WMG00);

TCCR0B = (1<<CS01);

OCR0B = 0x7F;
while (1)
{
//leere Schleife (warum weiß ich auch nicht)
}
return (0);

}

***********************************************************

Ist da schon iwas Grundlegens falsch dran?

von Karl H. (kbuchegg)


Lesenswert?

Michael schrieb:
1
TCCR0A = (1<<COMPB1) | ...

Das Bit heißt COM0B1 und nicht COMPB1

von Michael (Gast)


Lesenswert?

oh, stimmt.

bekomme aber trotzdem noch 4 fehlermeldungen. 'COMP01' und 'WMG00' 
undeclared (first use in this function) sind zwei davon. was bedeutet 
das? wie kann ich die denn deklarieren?

von Karl H. (kbuchegg)


Lesenswert?

Michael schrieb:
> oh, stimmt.
>
> bekomme aber trotzdem noch 4 fehlermeldungen. 'COMP01' und 'WMG00'
> undeclared (first use in this function) sind zwei davon. was bedeutet
> das?

Das du dich vertippt hast.

Das Ding heißt COM0B1
Ich buchstabiere:  C wie Caesar
                   O wie Otto
                   M wie Martha
                   Zero   wie 0, wei Null
                   B wie Bertha
                   Eins   wie 1, wie Eins

Und es heisst nicht  COMP01 und auch nicht COMPB1


Und das andere heißt WGM00 und nicht WMG00

Geee -  Emmmm   und nicht  Emmm - Geee

Soll ich das auch noch buchstabieren?

von Michael (Gast)


Lesenswert?

ne lass ma, trotzdem danke!!!!

von ET (Gast)


Lesenswert?

sei()

von Karl H. (kbuchegg)


Lesenswert?

ET schrieb:
> sei()

wozu?

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.