Komponenter:
Batteri, 5V regulator, ATtiny15, 220 ohm motstånd, knapp, IR-diod, kabel.
Inget schema, men det är trivialt, IR-dioden är kopplad till PB1, 5V till VCC och RST samt 0V till GND. Knappen bryter helt enkelt batterispänningen.
Viktigast av allt, här är koden:
Mikrokontrollern hade jag liggandes i en låda. Jag var lyckligt ovetandes att den var en utgående modell, anledningen var uppenbarligen att den saknar RAM-minne, vilket jag upptäckte när en for-loop inte fungerade. Jag kompilerade koden som en ATtiny25 eftersom det inte fanns stöd för ATtiny15, och fick därför definera om OCR1B som har bytt plats bland registren.
Kod: Markera allt
#define F_CPU 1600000UL
#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
#define PWM_ON TCCR1 |= _BV(6);
#define PWM_OFF TCCR1 &= ~_BV(6);
#define TCCR1 _SFR_IO8(0x30)
#define OCR1A _SFR_IO8(0x2E)
#define OCR1B _SFR_IO8(0x2D)
#define PWM_PIN PB1
#define PWM_PORT PORTB
#define PWM_DDR DDRB
void ioinit(void)
{
PWM_PORT &= ~_BV(PWM_PIN);
PWM_DDR |= _BV(PWM_PIN);
}
void one(void)
{
PWM_ON
_delay_us(250);
_delay_us(150);
PWM_OFF
_delay_us(250);
_delay_us(250);
_delay_us(250);
_delay_us(250);
_delay_us(210);
}
void zero(void)
{
PWM_ON
_delay_us(250);
_delay_us(150);
PWM_OFF
_delay_us(250);
_delay_us(130);
}
void start(void)
{
char a;
PWM_ON
for (a = 0; a < 38; a++) {
_delay_us(250);
if (a == 24) {
PWM_OFF
}
}
}
void sendchar(char data)
{
char a;
for (a = 0; a < 8; a++) {
if (data & 0x01) {
one();
} else {
zero();
}
data = data >> 1;
}
}
int main(void)
{
char a;
ioinit ();
TCCR1 = 0x23;
OCR1A = 59;
OCR1B = 119;
while (1) {
start();
sendchar(0b10000110);
sendchar(0b00111011);
sendchar(0b00000001);
sendchar(0b11111110);
one();
for (a = 0; a < 250; a++) {
_delay_us(250);
}
}
return 0;
}


Slutligen, ja jag är medveten om att man kan köpa en fjärrkontroll för 30 kr inklusive frakt från kina, men vafan.
