Lösung: Arduino UNO LED-Dimmer
Aufgabe a
C-Quelltext:
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRD = 0b11111111;
PORTB = 0b00000110;
OCR0A = 0;
OCR0B = 0;
TCCR0A = 0b10100011;
TCCR0B = 0b00000101;
while (1)
{
if (!(PINB & 0b00000010))
{
OCR0A += 10;
OCR0B += 10;
_delay_ms(100);
}
if (!(PINB & 0b00000100))
{
OCR0A -= 10;
OCR0B -= 10;
_delay_ms(100);
}
}
}
Aufgabe b
C-Quelltext:
#include <avr/io.h>
#include <stdint.h>
int main(void)
{
DDRD = 0b11111111;
PORTB =0b00000110;
TCCR0B = 0b00000101;
uint8_t soll=30;
uint8_t delay=255;
while (1)
{
if (!(PINB & 0b00000010))
{
soll = soll + 10;
for (int i=0 ; i<=delay ; i++)
{
for(int j=0 ; j<=delay; j++)
{
if (TCNT0 <= soll)
{
PORTD = 0b11111111;
}
else
{
PORTD = 0b00000000;
}
}
}
}
if (!(PINB & 0b00000100))
{
soll = soll - 10;
for (int i=0 ; i<=delay ; i++)
{
for(int j=0 ; j<=delay; j++)
{
if (TCNT0 <= soll)
{
PORTD = 0b11111111;
}
else
{
PORTD = 0b00000000;
}
}
}
}
if (TCNT0 <= soll)
{
PORTD = 0b11111111;
}
else
{
PORTD = 0b00000000;
}
}
}
C-Quelltext (mit Funktion):
#include <avr/io.h>
#include <stdint.h>
void PWM(int soll)
{
if (TCNT0 <= soll)
{
PORTD = 0b11111111;
}
else
{
PORTD = 0b00000000;
}
}
int main(void)
{
DDRD = 0b11111111;
PORTD |= 0b00000000;
PORTB =0b00000110;
TCCR0B = 0b00000101;
uint8_t soll=30;
uint8_t delay=255;
while (1)
{
if (!(PINB & 0b00000010))
{
soll = soll + 10;
for (int i=0 ; i<=delay ; i++)
{
for(int j=0 ; j<=delay; j++)
{
PWM(soll);
}
}
}
if (!(PINB & 0b00000100))
{
soll = soll - 10;
for (int i=0 ; i<=delay ; i++)
{
for(int j=0 ; j<=delay; j++)
{
PWM(soll);
}
}
}
|