Val av microprocessor, RGB LED styrning

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
dragon9226
Inlägg: 144
Blev medlem: 8 september 2010, 14:26:12

Re: Val av microprocessor, RGB LED styrning

Inlägg av dragon9226 »

Har pillat lite mer nu och fått mönstrena att bli som jag vill.
Var dock tvungen att byta stegningshåll, då mönstret blev både upp och ned och spegelvänt. Men nu har jag lyckats, så talet 21 lyser i rött med en grön bakgrund.
Har även lagt till variabeln tid, uint16_tid, för att kunna styra hur länge varje mönster sak visas.

Nu får jag ta och fortsätta göra mönster och sedan se till att löda dit knappar och klockbatteri.
Om ni har något kul mönsterförslag som passar för 8 pixlar bred och 6 hög, så skriv gärna något kort, så ska jag snart kunna lägga upp en video :D

Tack så hjärtligt mycket för all fin hjälp jag fått.
Kommer kanske vilja ha mer men än så länge är jag väldigt nöjd med den hjälp jag fått :)

Hur stort är progmem?
Ca hur många tal 0-7 tror ni jag skulle kunna lagra där? (hur många mönster på 48 pixlar)
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Val av microprocessor, RGB LED styrning

Inlägg av jesse »

Kul att det funkar äntligen.... :bravo:

>Hur stort är progmem?

tja... du har en Atmega128 eller?
PROGMEM är ju programminnet, dvs flashminnet. Som namnet antyder är det på 128 kilobytes. I detta ska både program och data (PROGMEM) få plats. När du kompilerar får du ett meddelande där det står hur mycket minne du använder, kolla hur många kB du har använt. Det som är kvar är det utrymme du kan fylla med fler mönster. Varje mönster är ju 3*48 bytes = 144 bytes.
dragon9226
Inlägg: 144
Blev medlem: 8 september 2010, 14:26:12

Re: Val av microprocessor, RGB LED styrning

Inlägg av dragon9226 »

Ok, när jag kör build så står det att 0,2% används, så då borde det vara gott om plats.
Kom på i går att jag bör börja fundera på dimningen också, så jag får väll sätta in en till variabel och klura på lite.

Sedan blir det att montera knappar och batterihållare och läsa sig till dem.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Val av microprocessor, RGB LED styrning

Inlägg av jesse »

Hur går det med dimningen?
Eller håller du på med klockan nu?
dragon9226
Inlägg: 144
Blev medlem: 8 september 2010, 14:26:12

Re: Val av microprocessor, RGB LED styrning

Inlägg av dragon9226 »

Jag måste erkänna att jag inte kommit någon vart sedan sist...
Detta beror nog på att jag precis kommit hem från en skidsemester i Åre.

Tänkte dock sätta mig ned nu och klura och skriva på dimningen.

Hara också funderat på att löda dit knapparna (och kanske batterihållarna). Vilka inte tycks passa riktigt som de ska, men det får jag försöka lösa.
Har också funderat lite på hur man tar emot en knapptryckning. Det borde i och för sig kunna bero på om knappen ställer om till ett konstant flöde eller bara en kort impuls.
Någon som vet?

Kan man sedan kolla med en if-sats eller liknande? Typ: om knappens ingång == 1 ??
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Val av microprocessor, RGB LED styrning

Inlägg av jesse »

Knapparna är väl sådana att den återfjädrar, dvs. går tillbaks när man släpper den.
Därför måste processorn minnas om man tryckt eller inte.

Det går att kolla med en if-sats.
if ((PINA & (1<<PA3)) == 0) { ... //knapp vid PORTA.3 nedtryckt ... }
Det finns massor av trådar i forumet som diskuterar hur man läser av knappar med AVR.

Vilken port är knapparna anslutna till?
dragon9226
Inlägg: 144
Blev medlem: 8 september 2010, 14:26:12

Re: Val av microprocessor, RGB LED styrning

Inlägg av dragon9226 »

Kan meddela att jag gjort framsteg med dimningen, och lyckats dimma upp och ned, dock för tillfället bara på ca 1,4s. Men har inte hunnit testa mer än så.

Angående vilka portar knapparna sitter på:
(Så måste jag hänvisa till "ritningarna" då jag har asvårt att läsa dem...)
Swp139 rev0.pdf
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
dragon9226
Inlägg: 144
Blev medlem: 8 september 2010, 14:26:12

Re: Val av microprocessor, RGB LED styrning

Inlägg av dragon9226 »

Jag har börjat knåpa på en text slide . Vilken sak visa en text som kommer in från höger och går ut åt vänster.

Koden ser nu ut så här:

Kod: Markera allt

void slide(uint8_t teckenval) {	// SKRIV ALGORITM HÄR
	//pixelnr = 0;

		for(int x = 0; x < 5; x++){                        //Stegar igenom de fem kolumnerna som varje tecken har, en blank på slutet för mellanrum.
			ROWNR = 0b00100000;                   //Sätter raden till den första så att det kan stegas igenom igen.
			red <<= 1;                                   //red, green och blue förflyttas ett steg i sidled, så att texten flyttar sig. (röd är omvänd på kortet)
			green >>= 1;
			blue >>= 1;
			for(int y = 0; y < 6; y++){                  //Stegar igenom den lodräta koordinaten för val av pixel. 
				
				colour = pgm_read_byte(&tecken [teckenval][(x+y*5)]);     //Hämtar den valda pixeln.
				if (colour & 1) blue |= 0b10000000;	//Blå                          //Aktiverar blå för en pixel på raden, (om den ska vara med).
				if (colour & 2) green |= 0b10000000;//Grön
				if (colour & 4) red |= 0b00000001;	//röd

				ROW = ROWNR;       //Aktiverar den rad som ska visas
				RED = red;              // Skickar ut data för röd, grön och blå
				GREEN = green;
				BLUE = blue;
				ROWNR  >>= 1;        //Stegar val av rad
				_delay_ms(100);
			}
				
			
		}
	
}
Samt tecken:

Kod: Markera allt

uint8_t PROGMEM tecken[4][30] = {
          { 0,0,0,0,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,1,1,1,0 } ,           // mönster siffra - 0
          { 0,0,0,0,0, 0,0,1,0,0, 0,1,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 0,1,1,1,0 } ,                // mönster siffra - 1
          { 0,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 1,1,1,1,0, 1,0,0,0,0, 1,1,1,1,0 } ,                // mönster siffra - 2 
		  { 2,2,1,1,4, 1,0,4,2,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 }
};
samt anrop:

Kod: Markera allt

slide(3);
Detta ska fungera så att i anropet väljer man vilket teckens som sak slidas.
Detta blir det första som kommer in, sedan skriver man slide igen och nästa fyller på.

Dock så fungerar inte detta som ni kanske förstår.
Då jag borde ha 6 olika red, green och blue för att kunna spara dem på alla rader.
(Problemet är att det blir samma färg på alla rader, samt att det lägger ihop färgerna från varje rad, med tiden.)

Vad tror ni kan vara en bra lösning?
(Huvudkoden ser lite lustig ut när man tittar på den....)
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Val av microprocessor, RGB LED styrning

Inlägg av jesse »

jag ser att du har med portkoderna i ditt textslide-program:

Kod: Markera allt

            ROW = ROWNR;       //Aktiverar den rad som ska visas
            RED = red;              // Skickar ut data för röd, grön och blå
            GREEN = green;
            BLUE = blue;
            ROWNR  >>= 1;        //Stegar val av rad
Det kan säkert funka. Men: Problemen med detta är flera.
Dels - om du tar med dessa grundinstruktioner varje gång du ska visa något nytt eller på ett nytt sätt, så kommer dessa instruktioner att upprepas på flera ställen i programmet, kanske lite olika varje gång. Dels blir programmet väldigt svårt att felsöka. "funkar inte" räcker inte för att veta vad som är fel. Man måste veta var i programmet felet uppstår. Därför gör man alltid sådana grundläggande saker som in/out i en separat funktion som man kallar på när det ska användas. Då vet man att den alltid fungerar när den väl är testad. Ett problem till med att ha in/ut-koder direkt i olika programsnuttar: om du skulle behöva skriva om in/ut-rutinen av någon orsak: om någon anslutning till lysdioderna ändras eller något som kan bli högst aktuellt i ditt fall: du måste skriva om den så att den fungerar som ett självgående interrupt. Det blir helt omöjligt att ändra denna rutin till en interruptrutin om den finns med lite här och var i koden, och dessutom fungerar lite olika på alla platser. En bra anledning att göra om den till självgående interrupt (läs tidigare i tråden om det) är t.ex. att du kan få det svårt att avläsa knapparna och andra händelser om processorn är upptagen större delen av tiden i loopar för att tända och släcka lysdioder. Ju fler funktioner du ska stoppa in i processorn desto krångligare kommer det att bli om de ska samsas i samma program. Och när programmet väl har blivit jättestort vill man inte gärna göra om alltihop i grunden för att det ska fungera utan hack och avbrott. Därför gör man den grunläggande I/O-rutinen som en separat funktion med ett definierat gränssnitt (variabler in) mot övriga programmet.

Hinner inte sätta mig in i slide-programmet just nu. Har massor av jobb att göra (programmering!) så jag får kolla senare nån gång.
Men din första fungerande rutin att skicka ut tecken till lysdioderna tar ju dem direkt från flash-minnet. Ska man kunna generera mönster på annat sätt (matematiska mönster eller tecken som rör sig) behöver man ha en RAM-matris som mellanlagring.

Sedan kan du åstadkomma rullningen på olika sätt. Kanske att du har en pekare till ramminnet som används av din I/O-rutin och låter pekaren flytta sig i ramminnet. Eller att du läser in tecknet till ramminnet på nytt varje gång det ska flytta på sig t.ex. Man blir ju tvungen att arbeta med två tecken samtidigt för att de ska komma efter varandra och synas delvis samtidigt.

Data måste packas så att det blir flexibelt. Om du skriver alla (eller de flesta) tecknen i alfabetet + siffrorna som matriser i flash.minnet så har du en grund att jobba med. Nästa steg kan t.ex vara att associera varje tecken med dess ascii-kod, så att tecknet Z motsvaras av heltalet 'Z' = 0x5A. Sedan blir inte steget långt till att du kan lagra texter i flashminnet t.ex. "Godmorgon!" och skicka ut det som en löpande text på din LED-display. Du läser av din realtidsklocka och får antagligen timmar,minter och sekunder i heltalsvariabler. Dessa omvandlar du till en textsträng i ramminnet som blir "13:45" som du sedan kan skicka ut till displayen...

För att detta ska vara möjligt och inte bli ett jättestort kaos behöver programmet delas upp i moduler... en som tolkar enskilda tecken 'a' 'b' 'c' '1' 2' '3' osv... Deta kan sedan användas av en annan modul som läser hela texter "abc123" och skickar ut dem på olika vis. Hela tiden tanken att en funktion bara gör en enda sak. Och den anropas av en annan funktion som gör något mer komplext osv.. Till slut i main räcker det kanske att skriva:

Kod: Markera allt

dimma_upp();
if (tim > 5 && tim < 9) rulla_text(Godmorgon);
else rulla_text(Godnatt);
rulla_tid(); // visa klockan
dimma_ner();
dragon9226
Inlägg: 144
Blev medlem: 8 september 2010, 14:26:12

Re: Val av microprocessor, RGB LED styrning

Inlägg av dragon9226 »

Här märks det att man har någon som kan sin sak att prata med.
Jag håller med om att vanligen förekommande kod borde vara i en egen funktion. De sak ordnas.

Men, jag tror tyvärr att lite av det du skrev går förbi mig, med pekare mm., då jag tyvärr inte har samma kunskap inom området...
Jag lär mig gärna nytt, men det får bli lite i taget, då jag även har annat än detta projekt att fundera på.

Det jag behöver nu är att knåpa ihop ett fungerande program som jag kan ha när jag ska visa upp projektet. Det behöver inte vara helt optimerat, men fungerande.
Jag sak klura vidare, och tanken med rullningen var att man skulle välja bokstav/ tecken som skickas, och sedan kan nästa genom anrop bara fylla på.
Även fast mycket av det du skrev låter bra, men tyvärr får komma lite senare.

Tack så mycket far att du tar dig tid och skriver i alla fall. Ska försöka analysera det lite mer när jag är piggare..
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Val av microprocessor, RGB LED styrning

Inlägg av jesse »

Men, jag tror tyvärr att lite av det du skrev går förbi mig, med pekare mm., då jag tyvärr inte har samma kunskap inom området...
Har nog skrivit det minst 7 gånger snart:
Köp / låna en grundläggande bok om C-programmering och läs. Det finns inget annat sätt att lära sig (jo, du kan förstås läsa igenom en massa tutorials på nätet). Tror jag nämnde en bra titel tidigare i tråden. Där står allt om pekare, och det finns exempel så att man kan prova tills man förstår.

OK, du har annat att göra också (det är ju bra), men det blir i princip omöjligt att förklara saker ... Det blir bara att jag upprepar det som står i boken, fast mer kortfattat, så på ett eller annat sätt måste du ändå göra det själv (= läsa och förstå).

Det funkar säkert utan pekare också bara det att man får jobba lite mer med indexeringen av matriserna...
dragon9226
Inlägg: 144
Blev medlem: 8 september 2010, 14:26:12

Re: Val av microprocessor, RGB LED styrning

Inlägg av dragon9226 »

Ok.
Jag får ta och göra på något smart sätt.
Troligen, försöka få ihop ett fungerande program, till redovisningen.
Sedan fördjupa mig när jag har tid.

Ska klura vidare angående slidern.
1. Men vad tror ni om att jag borde kunna löda dit knapparna?
Och kanske till och med batterihållaren om jag förstår hur den sak sitta.

Det borde vara möjligt att löda. Om det sedan finns relativt enkla sätt att använda knapparna så borde jag klara av det.
2. Hur är det där emot med klockan? Är den smidig att använda sig av?
dragon9226
Inlägg: 144
Blev medlem: 8 september 2010, 14:26:12

Re: Val av microprocessor, RGB LED styrning

Inlägg av dragon9226 »

Kan meddela att jag fått ihop en fungerande slider nu.
Dock behöver timingen justeras lite så att texten ser ljus ut och glider på rätt sätt.

Ändring:
Har nu fått timingen bra så att en tydlig text syns, i lagom tempo.
Ska kanske ta och på något smart sätt justera så att man kan välja textfärg och bakgrundsfärg. Men det fungerar i alla fall :)
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Val av microprocessor, RGB LED styrning

Inlägg av jesse »

kul :bravo:

när får vi se en video? :)
dragon9226
Inlägg: 144
Blev medlem: 8 september 2010, 14:26:12

Re: Val av microprocessor, RGB LED styrning

Inlägg av dragon9226 »

Det borde gå att ordna ganska snart, då jag har de viktigaste mönsterkomponenterna fixade.
Ska lägga in lite mer täcken och mönster så ska jag kunna lägga upp en.
Tänkte även göra en lite bättre, senare. Där jag presenterar lite av processen (mest bygg) mm.

Ska löda knapparna någon dag snart också. Men de behövs inte för filmen.
Fixade idag till en plexiglas kåpa som ska sitta runt kretskortet, som skydd :)
Skriv svar