Re: Dina mini-projekt!
Postat: 14 juni 2010, 21:38:51
Byggde en fjärrkontroll till min Olympus E-500.
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.
Givetvis är bilden nedan tagen med fjärrkontrollen. 

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.
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.
