Forum: Mikrocontroller und Digitale Elektronik at90usb Problem mit Ausgängen


von Matthias M. (matthias_moritz)


Lesenswert?

Hallo Zusammen,

Ich habe mit meinem at90usb1286 ein Problem. Wenn ich den Code unten auf 
den Controller aufspiele, dann glimmt eine LED die an PD0 Angeschlossen 
ist nur ganz leicht auf. Ich denke die bekommt Strom über einen internen 
PullUp Widerstand. Wenn ich den Ausgang auf low setze passiert das 
selbe. Kommentiere ich die PWM_Init Funktion aus, dann leuchtet die LED 
ganz normal wie man es erwartet.
An PB7 kann ich mit ORC0A = ... die Intensität einer LED steuern.

Ich gebe zu, ich hab den Code für die Einstellungen des Timers blind aus 
dem World Wide Web kopiert und (noch) nicht verstanden was da genau 
passiert :-) Ich kann im Datenblatt aber auch keinen Hinweis finden.
Was mache ich falsch?

1
int main (void){
2
3
    DDRD = 0xFF;
4
    DDRB = 0xFF;
5
6
    PORTD = 0x01;
7
    PWM_Init();
8
    OCR0A = 0x55;
9
    for(;;){
10
    }
11
    
12
13
void PWM_Init(void)
14
{
15
16
    TCCR0A=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00); 
17
    TCCR0B=(1<<CS01)|(1<<CS00); 
18
    return;
19
}

von Vorname N. (felixx)


Lesenswert?

Durch PWM_Init wird die PulsWeitenModulation gestartet. Ich hab nicht im 
Datemblatt nachgeschaut, aber (einer) der PWM-Ausgänge ist vermutlich 
der PD0. Mit OCR0A wird das Tastverhältnis (also An- zu Auszeit) 
eingestellt. In die TCCR0x Register werden die PWM-Frequenz usw. 
eingetragen.
Wenn die LED  nicht glimmen soll, dann nimm besser Programmcode, der 
Deine Aufgabe/Anforderung besser erfüllt ;-)

von Matthias M. (matthias_moritz)


Lesenswert?

Hallo,


Vorname Nachname schrieb:
> ..., aber (einer) der PWM-Ausgänge ist vermutlich der PD0

Das Datenblatt sagt mir für PB7:
OC0A/OC1C/PCINT7 (Output Compare and PWM Output A for Timer/Counter0, 
Output Compare and PWM Output C for Timer/Counter1 or Pin Change 
Interrupt 7)

und für PD0:
INT0/SCL/OC0B (External Interrupt0 Input or TWI Serial CLock or Output
Compare for Timer/Counter0)

Ich möchte PB7 als PWM Ausgang und PD0 als ganz normalen Digitalen I/O. 
Mit meiner PWM_Init Funktion werde ich den PD0 auch als PWM Ausgang 
definiert haben. Das möchte ich aber nicht und ich weiß nicht wie es 
richtig geht.

Vielen Dank für die Hilfe.

von spess53 (Gast)


Lesenswert?

Hi

>Ich möchte PB7 als PWM Ausgang und PD0 als ganz normalen Digitalen I/O.
>Mit meiner PWM_Init Funktion werde ich den PD0 auch als PWM Ausgang
>definiert haben. Das möchte ich aber nicht und ich weiß nicht wie es
>richtig geht.

Wenn COM0B1:0 = 00 sind, ist der Pin von Timer getrennt und als normaler 
I/O-Pin verwendbar.

MfG Spess

von Matthias M. (matthias_moritz)


Lesenswert?

Danke, das war der fehler.

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.