Ich habs jetzt mal ganz anders versucht; so wie es mir als noch-PWM-Laien am logischsten zu lösen wäre.
Das funktioniert auch, nur ist es wohl sehr umständlich, man würde es nie so machen und komischerweise leuchten zwei der vier angeschlossenen LEDs heller als die anderen beiden...
Was da abläuft ist, dass alle vier nacheinander einmal kurz an/aus faden.
Ich hab ja schon einige Beispielprogramme gefunden, so ist es ja nicht; und mir auch die entsprechenden Kapitel in dem 200 Steiten starken Datenblatt durchgelesen, aber das ist englisch und es werden sehr viele Details erwähnt, die ich zwei Absätze weiter schon wieder vergessen hab.
Und in den Beispielprogrammen, die ich bisher gesehen hab, beschränkt man sich nie auf das Ausprobieren einer jeweiligen Funktion, sondern es hängt immer viel mehr Funktionalität mit dran und macht es mir sehr schwer das für mich wichtige rauszulesen.
Kennt einer einfach gehaltene Beispiele? Wo man sich z.B. nur darauf beschränkt einen Timer anzuschmeißen oder damit eine ISR anzusteuern. Nichtmal solche einfachen Sachen hab ich bisher auf die Reihe bekommen;(
Code:
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
int main (void)
{
// Pin 1 von Port A (PA1) als Ausgang schalten
DDRA = (1 << PA1);
DDRB = (1 << PB4);
DDRB = (1 << PB3);
DDRA = (1 << PA0);
int counter=0;
int state=1;
int i,x=0;
int nxt=0;
for (;;) {
//PORTA |= (1 << PA1); // bit im Portregister auf 1 setzen => LED leuchtet
if(nxt==0)
{
PORTA |= (1 << PA1);
}
if(nxt==1)
{
PORTB |= (1 << PB4);
}
if(nxt==2)
{
PORTB |= (1 << PB3);
}
if(nxt==3)
{
PORTA |= (1 << PA0);
}
for(i=0;i<counter;i++)
{
_delay_us(1);
}
//PORTA &= ~(1 << PA1); // bit im Portregister auf 0 setzen => LED aus
if(nxt==0)
{
PORTA &= ~(1 << PA1); // bit im Portregister auf 1 setzen => LED leuchtet
}
if(nxt==1)
{
PORTB &= ~(1 << PB4);
}
if(nxt==2)
{
PORTB &= ~(1 << PB3);
}
if(nxt==3)
{
PORTA &= ~(1 << PA0);
}
for(i=0;i<100-counter;i++)
{
_delay_us(1);
}
_delay_ms(1);
if(state==1)
{
x++;
if(x==8)
{ x=0;
counter+=2;
if(counter>10)counter+=4;
if(counter>40)counter+=6;
if(counter>60)counter+=4;}
if(counter>90)state=0;
}
if(state==0)
{
x++;
if(x==8)
{ x=0;
counter--;
if(counter>20)counter-=4;
if(counter>60)counter-=6;}
if(counter<5){state=1;nxt++;if(nxt==4)nxt=0;}
}
}
}
Lesezeichen