Val av microprocessor, RGB LED styrning
-
- Inlägg: 144
- Blev medlem: 8 september 2010, 14:26:12
Re: Val av microprocessor, RGB LED styrning
Aha, det är där det svaga ljuset kommer ifrån.
Jag ska försöka att få bort det, då det inte var meningen, dock som sagt kan det vara en kol effekt i vissa lägen.
Jag ska försöka att få bort det, då det inte var meningen, dock som sagt kan det vara en kol effekt i vissa lägen.
-
- Inlägg: 144
- Blev medlem: 8 september 2010, 14:26:12
Re: Val av microprocessor, RGB LED styrning
Hej alla glada!
Nu börjar jag äntligen komma igång med projektet igen.
Komponenter och kretskort är införskaffat. Kretskortet är delvis lött, (de komplicerade delarna).
Jag har även tillverkat en "fixtur-platta", i en cnc-maskin, och i denna har jag nu monterat 192 RGB-leds.
Så nu är det bara lödande av kopplingstråd och kretskort som återstår, samt programmeringen då självklart.
Programmeringen blir nog den klurigaste delen, men med lite studerande så ska det nog gå ihop sig.
Jag funderar på att lägga upp schemana, för de intresserade att se.
Om bara dygnet kunde ha fler timmar =)
Nu börjar jag äntligen komma igång med projektet igen.
Komponenter och kretskort är införskaffat. Kretskortet är delvis lött, (de komplicerade delarna).
Jag har även tillverkat en "fixtur-platta", i en cnc-maskin, och i denna har jag nu monterat 192 RGB-leds.
Så nu är det bara lödande av kopplingstråd och kretskort som återstår, samt programmeringen då självklart.
Programmeringen blir nog den klurigaste delen, men med lite studerande så ska det nog gå ihop sig.
Jag funderar på att lägga upp schemana, för de intresserade att se.
Om bara dygnet kunde ha fler timmar =)
-
- Inlägg: 144
- Blev medlem: 8 september 2010, 14:26:12
Re: Val av microprocessor, RGB LED styrning
Se scheman i nästa inlägg.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av dragon9226 8 december 2010, 17:20:08, redigerad totalt 1 gång.
Re: Val av microprocessor, RGB LED styrning
Det där schemat har ju bara 64 RGB-dioder. Men kul att det har hänt en massa sen sist.
-
- Inlägg: 144
- Blev medlem: 8 september 2010, 14:26:12
Re: Val av microprocessor, RGB LED styrning
Ok.
Där sa du något.
Jag ber så mycket om ursäkt, såg nu att jag råkat lägga ut fel scheman...
Här kommer det riktiga schemana:
Där sa du något.
Jag ber så mycket om ursäkt, såg nu att jag råkat lägga ut fel scheman...
Här kommer det riktiga schemana:
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Val av microprocessor, RGB LED styrning
Youtube suger, clippet är borta för det finns musik från sony...
En spontan sak som du kan lägga till på schemat är ett spi-eeprom typ 25LC08 eller liknade, då kan du lagra sekveser utanför processorn. Bara key3 du behöver flytta.

En spontan sak som du kan lägga till på schemat är ett spi-eeprom typ 25LC08 eller liknade, då kan du lagra sekveser utanför processorn. Bara key3 du behöver flytta.
- Swech
- EF Sponsor
- Inlägg: 4750
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: Val av microprocessor, RGB LED styrning
Det sitter en Mega128 på kortet. 64k word flash
Det bör räcka en stund
Swech
Det bör räcka en stund
Swech
-
- Inlägg: 144
- Blev medlem: 8 september 2010, 14:26:12
Re: Val av microprocessor, RGB LED styrning
Ok.
Det där lät lite komplicerat.
Behöver man skriva något speciellt i koden för att använda det minnet?
Eller används det automatiskt när man lägger in en kod som inte får plats i processorn?
Tack för att du såg att klippet inte låg kvar.
Jag har nu bytt musik på det, till något som fans på hemsidan som förslag, så nu ska det fungera igen.
Är det något speciellt jag bör ändra i den gamla koden, så att det fungerar på det nya kortet?
Här är koden jag har från tidigare:
Det där lät lite komplicerat.
Behöver man skriva något speciellt i koden för att använda det minnet?
Eller används det automatiskt när man lägger in en kod som inte får plats i processorn?
Tack för att du såg att klippet inte låg kvar.
Jag har nu bytt musik på det, till något som fans på hemsidan som förslag, så nu ska det fungera igen.
Är det något speciellt jag bör ändra i den gamla koden, så att det fungerar på det nya kortet?
Här är koden jag har från tidigare:
Kod: Markera allt
//---------------- standardbibliotek ------------------
#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
#include <util/delay_basic.h>
/* definiera pinnar på processorn .
* (1<< BIT) tilldelar VÄRDET av en bit.
* T.ex BIT=5 ger värdet 32. */
// färger
#define OUTPUT_BLUE (~(1<<PB3))
#define OUTPUT_GREEN (~(1<<PB4))
#define OUTPUT_RED (~(1<<PB5))
// shiftregister - styr lysdiodernas färger i kolumner
#define CLOCK (1<<PB2) // shiftregister klocka (SCK)
#define STROBE (1<<PB6) // shiftregister strobe (STR)
// lysdioder - rader
#define RAD0 (1<<PA0) // motsvarar pinne PA0 - dvs LED0 i schemat.
#define RAD1 (1<<PA1)
#define RAD2 (1<<PA2)
#define RAD3 (1<<PA3)
#define RAD4 (1<<PA4)
#define RAD5 (1<<PA5)
#define RAD6 (1<<PA6)
#define RAD7 (1<<PA7) // motsvarar pinne PA7 - dvs LED7 i schemat.
// funktion som skickar ut data till shiftregistren
// red,blue,green innehåller var och en 8 bitar data.
// varje bit tänder en LED i den kolumnen
void skicka_data(char red, char green, char blue) { // SKRIV ALGORITM HÄR
for (char i=0;i<8;i++) { // åtta varv
// "output" är den variabel vars databitar kommer att skickas ut på PORTB.
char output = 0b11111111; // ettställ alla bitar först
// kolla bit nr 7 i var och en av de tre färgerna
if (red & (1<<7)) output &= OUTPUT_RED;
if (green & (1<<7)) output &= OUTPUT_GREEN;
if (blue & (1<<7)) output &= OUTPUT_BLUE;
// shifta bitarnas position ett steg år vänster (bit 6 blir bit7 osv..)
red = (red << 1);
green = (green << 1);
blue = (blue << 1);
// skicka ut data för en kolumn
// variablen "output" innehåller nu data för alla tre färger
PORTB = STROBE | output; // denna funktion skickar ut datan till shiftregistren
_delay_us(1);
PINB = CLOCK; // toggla klockan - dvs skicka ut färgkombinationen till shiftregistren
_delay_us(1);
PINB = CLOCK;
_delay_us(1);
}
}
/**** huvudprogrammet ****/
int main(void) {
// initiering av portar (se kapitel 12 i databladet - särskilt 12.2.1)
DDRA = 0b11111111; // alla pinnar på port A ska vara utgångar
DDRB = 0b11111111; // alla pinnar på port B ska vara utgångar
PORTA = 0b11111111; //aktiverar alla rader
while(1) { // ...loopa för evigt...
// raden nedan tänder följande färger i ordning kolumn 0 till kolumn7
// svart,röd,blå,grön,gul,violett,vit,magenta,svart
for (int y = 0; y < 3; y++){
PORTA = 0b00011000;
skicka_data(0b00011000, 0b00011000, 0b00000000 );// red, green, blue
_delay_ms(500);
for (int i = 0; i < 100; i++){
PORTA = 0b00111100;
skicka_data(0b00011000, 0b00011000, 0b00000000 );// red, green, blue
_delay_ms(1);
PORTA = 0b00011000;
skicka_data(0b00111100, 0b00111100, 0b00000000 );// red, green, blue
_delay_ms(1);
}
}
}
}
Re: Val av microprocessor, RGB LED styrning
jo, man behöver skriva speciell kod. Det var bara ett förslag om inte kortet redan är tillverkat.
Fast man behöver inte använda det om man inte vill, behöver inte ens löda dit det...
Edit: det var för framtida bruk om det behövs mycket minne....
Fast man behöver inte använda det om man inte vill, behöver inte ens löda dit det...
Edit: det var för framtida bruk om det behövs mycket minne....
Re: Val av microprocessor, RGB LED styrning
Då får du först berätta vad du gjort för ändringar på det nya kortet som inte var med på det gamla. Det är ju en omväg för oss andra att lusläsa ditt schema för att berätta för dig vad du ändrat på.Är det något speciellt jag bör ändra i den gamla koden, så att det fungerar på det nya kortet?
Men du har ju en hel del att göra. T.ex. kommunicera med klockan som du har satt dit.
Jag kan tipsa lite om hur du utnyttjar flashminnet för lagring av konstanter.
Nu vet jag inte exakt i vilket format din data kommer att vara, men det är mindre viktigt - principen är detsamma oavsett typ.
Du börjar att med att inkludera filen
pgmspace.h genom att skriva
Kod: Markera allt
#include <avr/pgmspace.h>
Det är kanske meningslöst att deklarera enstaka variabler i flashminnet, men bara för att det är det enkaste exemplet börjar jag med det:
int16_t PROGMEM value = 500;
Nu är det så knepigt att dessa konstanter uppfattas av kompilatorn som vanliga variabler MEN DET ÄR DE INTE! Siffran 500 lagras någonstans i Flashminnet. Adressen till platsen pekas ut av *value. Så därför kan du aldrig använda dem som man brukar med variabler. Du kan alltså inte skriva någon av nedanstående rader utan att det blir tokfel (då kommer kompilatorn att ordna så att processorn läser / skriver i SRAM-minnet istället för Flashminnet och det funkar inte:
Kod: Markera allt
int16_t a = value; // tilldela värdet till a - FEL!
value = a; // också fel!
Åttabitars: int8_t a = pgm_read_byte(&value);
&-tecknet måste du ha där för att visa att det är ADRESSEN till värdet som ska skickas!
Men för att kunna utnyttja flashminnet till stora mängder data behöver du ju ha arrayer som du kan adressera t.ex. med pekare:
Kod: Markera allt
int16_t PROGMEM limits[VV_ANTAL] = {5100, 5050, 5000,3460, 3480, 3500, 5100, 2000, 500, 125, 99,99, 999, 800, 100, 199 ,199 , 3, 800 }; // här lagras data i Flashminnet
int16_t *flashpekare = (int16_t*)&limits; // pekare definieras som pekar på arrayens början
#define ANTAL (sizeof(limits) / 2) // antal 16-bitars parametrar
for (uint8_t i = 0; i<ANTAL; i++) { // en loop som går igenom alla element i arrayen
int16_t data = pgm_read_word(flashpekare+i);
// kod här som använder datan...
}
Senast redigerad av jesse 9 december 2010, 18:31:18, redigerad totalt 3 gånger.
Re: Val av microprocessor, RGB LED styrning
> Stjärnan måste du ha där för att visa att det är ADRESSEN till värdet som ska skickas!
Du menar:dvs & för adressen.
> 5100, 2000, 500, 125 X, 99.9 X,99.9 X,
X:en och flyttalen förstår jag inte.
Du menar:
Kod: Markera allt
int16_t a = pgm_read_word(&value);
> 5100, 2000, 500, 125 X, 99.9 X,99.9 X,
X:en och flyttalen förstår jag inte.
-
- Inlägg: 144
- Blev medlem: 8 september 2010, 14:26:12
Re: Val av microprocessor, RGB LED styrning
Några av de saker som är nytt är:
Klocka
Extern kristall
Tryckknappar
Mer än så vet jag inte...
Då det inte är jag som har konstruerat kretskortet, och jag har inte närstuderat det ännu eller lött några av de komponenter som än så länge sitter på det.
Så, om Swech, som har konstruerat kortet, skulle kunna hjälpa mig att säga vilka nya delar som kräver kod så ska vi kunna lösa detta.
Tack för kod bitarna =)
Klocka
Extern kristall
Tryckknappar
Mer än så vet jag inte...
Då det inte är jag som har konstruerat kretskortet, och jag har inte närstuderat det ännu eller lött några av de komponenter som än så länge sitter på det.
Så, om Swech, som har konstruerat kortet, skulle kunna hjälpa mig att säga vilka nya delar som kräver kod så ska vi kunna lösa detta.
Tack för kod bitarna =)
Re: Val av microprocessor, RGB LED styrning
Är kretskortet redan färdigt eller går det att göra ändringar? Jag skulle t.ex. lagt till kondensatorer på tryckknapparna mot kontaktstuds... men det ämnet har ju diskuterats många gånger förut i det här forumet så det kanske vi inte behöver ta om igen här. Men du kan ju kolla dom trådarna. Likaså hur man bäst läser av dem.
klockan får du studera hur du ska göra genom att läsa databladet. Swech kanske skickade med några referenser eller t.o.m. drivrutiner / kodsnuttar för att ansluta till klockan? Den kommunicerar ju med I²C-interface - i databladet för ATmegan så kallas det istället för "Two-wire Serial Interface", men är samma sak.
klockan får du studera hur du ska göra genom att läsa databladet. Swech kanske skickade med några referenser eller t.o.m. drivrutiner / kodsnuttar för att ansluta till klockan? Den kommunicerar ju med I²C-interface - i databladet för ATmegan så kallas det istället för "Two-wire Serial Interface", men är samma sak.
- Swech
- EF Sponsor
- Inlägg: 4750
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: Val av microprocessor, RGB LED styrning
Kortet är etsat och klart. Dragon har fått ett bestyckat ex.
Nytt mot föregående är:
Processor bytt till Mega128. Det är alltså gott om minne för att göra sekvenser m.m.
16Mhz kristall
3 tryckknappar slutande mot jord, förutsätter intern pullup. Avstudsning görs enklast i mjukvara.
i2c klocka med externt 3V CR2032 batteri samt 32khz kristall
Direktdrivning av rader/kolumner, alltså inga skiftregister.
Schemat visar 6x8 lysdioder. Vid varje diod har dragon tänkt att parallellkoppla 4 dioder
Det blir 192 dioder totalt. Styrbart i grupper om 2x2
------------
övrigt
Mosi/miso är växlade till IDC kontakten. Dragons kort är patchat, schemat är ej uppdaterat.
Resistorvärden är ökade till transistorer.
5V regulatorn klarar > 1 A men övrigt så som diod samt PTC är maxad till 1A.
Likaså den nätadapter som dragon har klarar max 1A. Att köra alla dioder med vitt samtidigt kan därför ligga precis på gränsen. Om detta blir ett problem så måste diod+ptc bytas ut samt ny adapter användas.
Jag har verifierat att processorn funkar, med 16Mhz
Utgångssteg har testats - ok
Knappar samt i2c klocka är ej monterade, montering samt test skall dragon fixa
Swech
Nytt mot föregående är:
Processor bytt till Mega128. Det är alltså gott om minne för att göra sekvenser m.m.
16Mhz kristall
3 tryckknappar slutande mot jord, förutsätter intern pullup. Avstudsning görs enklast i mjukvara.
i2c klocka med externt 3V CR2032 batteri samt 32khz kristall
Direktdrivning av rader/kolumner, alltså inga skiftregister.
Schemat visar 6x8 lysdioder. Vid varje diod har dragon tänkt att parallellkoppla 4 dioder
Det blir 192 dioder totalt. Styrbart i grupper om 2x2
------------
övrigt
Mosi/miso är växlade till IDC kontakten. Dragons kort är patchat, schemat är ej uppdaterat.
Resistorvärden är ökade till transistorer.
5V regulatorn klarar > 1 A men övrigt så som diod samt PTC är maxad till 1A.
Likaså den nätadapter som dragon har klarar max 1A. Att köra alla dioder med vitt samtidigt kan därför ligga precis på gränsen. Om detta blir ett problem så måste diod+ptc bytas ut samt ny adapter användas.
Jag har verifierat att processorn funkar, med 16Mhz
Utgångssteg har testats - ok
Knappar samt i2c klocka är ej monterade, montering samt test skall dragon fixa
Swech
-
- Inlägg: 144
- Blev medlem: 8 september 2010, 14:26:12
Re: Val av microprocessor, RGB LED styrning
Det där var precis vad vi behövde.
Tack för den fina och utförliga listan. =)
Med tanke på överbelastningen, på 1A, så tänkte jag så att man borde kunna "blinka" exempelvis halva-halva, med en så hög frekvens att det inte syns,
men så att alla inte är tända samtidigt.
Det borde väll kunna fungera? om man vill ha hela vit.
Tack för den fina och utförliga listan. =)
Med tanke på överbelastningen, på 1A, så tänkte jag så att man borde kunna "blinka" exempelvis halva-halva, med en så hög frekvens att det inte syns,
men så att alla inte är tända samtidigt.
Det borde väll kunna fungera? om man vill ha hela vit.