By A Web Design
På tide med en ny ledkube!
Denne gangen blir det en kube med 4 x 4 x 4, altså 64, lysdioder. Den forrige kuben, med 3x3x3 lysdioder ble lagd etter oppskrift funnet via Instructables, med noen små modifikasjoner. Jeg ville denne gangen lage alt fra grunnen, rett og slett for å lære mer.
Det innebærer:
-Skjemategning i Proteus / ISIS
-Kretskortutlegg i Proteus / ARES
-Produksjon av kretskort (belysning, framkalling og etsing)
-Montering av kuben, med overflatemontert mikrokontroller
-Programmering av kontrolleren
Jeg vil legge ut alt på denne siden etter hvert som det blir klart.
Skjema
Skjema i ISIS-format kan du laste ned her
På skjemaet vil du se at jeg ikke har satt inn lysdiodene, men i stedt brukt terminaler for LED1-LED16 for anoden på lysdiodene og GROUND1-GROUND4 for hvert av de 4 jordplanene (katodene). Jeg valgte å gjøre det sånn for å gjøre overgangen til kretskort enklere.
Kretskortlayout
Layout i ARES-format kan du laste ned her.
Mikrokontrolleren, en AtMega48, er en 32-pins overflatemontert utgave, og monteres derfor på undersiden av kretskortet (kobbersiden).
Programvare
Jeg bruker AVR Studio versjon 5, og programmerer kontrolleren i C.
Dette er et enkelt testprogram for å sjekke at alle lysdiodene fungerer som det skal. Det bruker et par FOR-sløyfer for å aktivere hvert jordplan og deretter tenne en og en lysdiode på det planet.
/*
* LedKube444.c
*
* Created: 10.11.2011 18:05:58
* Author: PERSTOL
*/
#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
int main(void)
{
DDRB=0xff; DDRC=0xff; DDRD=0xff; //Setter B, C og D til utganger
PORTC=0xff; // Port C pinne 0 til 3 er jordplanene. Disse settes i utgangspunktet til 1
PORTB=0; // Lysdiode 1-8
PORTD=0; // Lysdiode 9-16
int plane,led;
while(1)
{
for(plane=0;plane<4;plane++){
PORTC=(0xff)&~(1<<plane);
for (led=0;led<16;led++){
if(led<8){
PORTB=(1<<led);
} else {
PORTB=0;
PORTD=(1<<(led-8));
}
_delay_ms(200);
}
PORTD=0;
PORTC=0xff;
}
}
}

