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 »

Så här ser hela programmet ut, dock lite dåligt kommenterat på vissa ställen, men ni kan nog förstå det vesäntliga.
While-satserna i main med //////////////////////////////////**** är de jag använt, och testat lite olika med.
(Tyvärr lång kod, varav lite är intressant.

Kod: Markera allt



//---------------- standardbibliotek ------------------
   // #define F_CPU 8000000   för att använda intern 8 MHz osilator
   #include <avr/io.h>
   #include <util/delay.h>
   #include <util/delay_basic.h>
   #include <avr/pgmspace.h>

   #define CLOCK (1<<PB1)

   #define ROW PORTF
   #define RED PORTA
   #define GREEN PORTC
   #define BLUE PORTD
   #define KNAPPAR PORTB
   uint8_t knappar;
   //#define knappar PORTB //3.4.5
   //if ((KNAPPAR & (1<<PB3)) == 0) { ... //knapp vid PORTB.3 nedtryckt ... }
   
   uint8_t dimningsholl; //Dimningsvariabel, 1=upp, 0=ned
   uint16_t dimningssteg = 1; //Variabel för hur dimningen uppför sig?
   uint8_t pixelnr;
   uint16_t tid = 1;
   uint8_t ROWNR;
   uint8_t monster[9][48];
   uint8_t tecken[44][30];
   uint8_t monsterval;
   uint8_t colour;
   uint8_t red = 0b00000000;
   uint8_t green = 0b00000000;
   uint8_t blue = 0b00000000;

   uint8_t redscroll[6];
   uint8_t bluescroll[6];
   uint8_t greenscroll[6];


void refrech() {	// SKRIV ALGORITM HÄR
	
	for(int varv = 0; varv < tid; varv++){
	pixelnr = 0;
	ROWNR = 0b00100000;	
		for(int y = 0; y < 6; y++){	
			for(int x = 0; x < 8; x++){
				red <<= 1;
				green >>= 1;
				blue >>= 1;
				colour = pgm_read_byte(&monster [monsterval][(x+y*8)]);
				if (colour & 1) blue |= 0b10000000;	//Blå
				if (colour & 2) green |= 0b10000000;	//Grön
				if (colour & 4) red |= 0b00000001;	//röd
				pixelnr++;
			}
			ROW = ROWNR;
			RED = red;
			GREEN = green;
			BLUE = blue;
			ROWNR  >>= 1;
			_delay_ms(1);

			if((dimningsholl == 0) | (dimningsholl == 1)){
				ROW = 0b00000000;
				RED = 0b00000000;
				GREEN = 0b00000000;
				BLUE = 0b00000000;
				
				if(dimningsholl == 0){
					dimningssteg++;
					for(int z = 0; z < (dimningssteg); z++){	
						_delay_us(6); //var 6
					}
				}
				
				if(dimningsholl == 1){
					dimningssteg--;
					for(int z = 0; z < (dimningssteg); z++){	
						_delay_us(6); //var 6
					}
				}
			}

			//for(int z = 0; z < dimningssteg; z++){	
			//	_delay_us(6); //var 6
			//}
			//if(dimningsholl == 0) dimningssteg++;
			//if(dimningsholl == 1) dimningssteg--;

		}
	}
}

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

	//red = 0b00000000;
    //green = 0b00000000;
    //blue = 0b00000000;	
	//for(int z = 0; z < 1; z++){
		
		for(int x = 0; x < 5; x++){
			//ROWNR = 0b00100000;
			for(int z = 0; z < 6; z++){
				redscroll[z] <<= 1;
				greenscroll[z] >>= 1;
				bluescroll[z] >>= 1;
			}
			//for(int y = 0; y < 6; y++){
			//for(int i = 0; i < 200; i++){
				for(int z = 0; z < 6; z++){	
					colour = pgm_read_byte(&tecken [teckenval][(x+z*5)]);
					if (colour & 1) bluescroll[z] |= 0b10000000;	//Blå
					if (colour & 2) greenscroll[z] |= 0b10000000;//Grön
					if (colour & 4) redscroll[z] |= 0b00000001;	//röd
					//pixelnr++;	
				}
				for(int i = 0; i < 7; i ++){
					ROWNR = 0b00100000;
					for(int z = 0; z < 6; z++){
						ROW = ROWNR;
						RED = redscroll[z];
						GREEN = greenscroll[z];
						BLUE = bluescroll[z];
						ROWNR  >>= 1;
						_delay_us(3500);
					}
				}
			//}
			//}
				
			
		}
	//}
	
}

uint8_t PROGMEM monster[9][48] = {
          { 2,4,4,2,2,2,4,2, 4,2,2,4,2,4,4,2, 2,2,4,2,2,2,4,2, 2,4,2,2,2,2,4,2, 4,4,4,4,2,4,4,4, 2,2,2,2,2,2,2,2 } ,                // grön21, röd bakgrund. mönster nr 0
          { 4,2,2,4,4,4,2,4, 2,4,4,2,4,2,2,4, 4,4,2,4,4,4,2,4, 4,2,4,4,4,4,2,4, 2,2,2,2,4,2,2,2, 4,4,4,4,4,4,4,4 } ,                // röd21, grön bakgrund. mönster nr 1
          { 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0 } ,				// Rutmönster blå
		  { 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0 } ,				// Rutmönster grön
		  { 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0 } ,				// Rutmönster röd
		  { 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1 } ,				// Rutmönster blå motvänd
		  { 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2 } ,				// Rutmönster grön motvänd
		  { 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4 } ,				// Rutmönster röd  motvänd
		  { 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, } ,				// Färgtest
};

uint8_t PROGMEM tecken[44][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 } ,			// 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 } ,			// 1 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 } ,			// 2 mönster siffra - 2 
		  { 0,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 0,1,1,1,0, 0,0,0,1,0, 1,1,1,1,0 } ,			// 3 mönster siffra - 3
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,0,1,0 } ,			// 4 mönster siffra - 4
		  { 0,0,0,0,0, 1,1,1,1,0, 1,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 1,1,1,1,0 } ,			// 5 mönster siffra - 5
		  { 0,0,0,0,0, 1,1,1,1,0, 1,0,0,0,0, 1,1,1,1,0, 1,0,0,1,0, 1,1,1,1,0 } ,			// 6 mönster siffra - 6
		  { 0,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,0,1,0, 0,0,0,1,0, 0,0,0,1,0 } ,			// 7 mönster siffra - 7
		  { 0,0,0,0,0, 1,1,1,1,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,1,1,1,0 } ,			// 8 mönster siffra - 8
		  { 0,0,0,0,0, 1,1,1,1,0, 1,0,0,1,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,0,1,0 } ,			// 9 mönster siffra - 9
		  { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 } ,			// 10 mönster mellanslag ' '
		  { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0 } ,			// 11 mönster '.'
		  { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0, 1,1,0,0,0 } ,			// 12 mönster ','
		  { 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0 } ,			// 13 mönster ':'
		  { 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 1,1,0,0,0 } ,			// 14 mönster '!'
		  { 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,			// 15 mönster bokstav - A
		  { 0,0,0,0,0, 1,1,1,0,0, 1,0,0,1,0, 1,1,1,0,0, 1,0,0,1,0, 1,1,1,0,0 } ,			// 16 mönster bokstav - B
		  { 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,0,0, 1,0,0,1,0, 0,1,1,0,0 } ,			// 17 mönster bokstav - C
		  { 0,0,0,0,0, 1,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,1,1,0,0 } ,			// 18 mönster bokstav - D
		  { 0,0,0,0,0, 1,1,1,1,0, 1,0,0,0,0, 1,1,1,0,0, 1,0,0,0,0, 1,1,1,1,0 } ,			// 19 mönster bokstav - E
		  { 0,0,0,0,0, 1,1,1,1,0, 1,0,0,0,0, 1,1,1,0,0, 1,0,0,0,0, 1,0,0,0,0 } ,			// 20 mönster bokstav - F
		  { 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,0,0, 1,0,1,1,0, 0,1,1,0,0 } ,			// 21 mönster bokstav - G
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,			// 22 mönster bokstav - H
		  { 0,0,0,0,0, 0,1,1,1,0, 0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 0,1,1,1,0 } ,			// 23 mönster bokstav - I
		  { 0,0,0,0,0, 0,0,1,1,0, 0,0,0,1,0, 0,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0 } ,			// 24 mönster bokstav - J
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,1,0,0, 1,1,0,0,0, 1,0,1,0,0, 1,0,0,1,0 } ,			// 25 mönster bokstav - K
		  { 0,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,1,1,1,0 } ,			// 26 mönster bokstav - L
		  { 0,0,0,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,			// 27 mönster bokstav - M ???
		  { 0,0,0,0,0, 1,0,0,1,0, 1,1,0,1,0, 1,1,1,1,0, 1,0,1,1,0, 1,0,0,1,0 } ,			// 28 mönster bokstav - N ???
		  { 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0 } ,			// 29 mönster bokstav - O
		  { 0,0,0,0,0, 1,1,1,0,0, 1,0,0,1,0, 1,1,1,0,0, 1,0,0,0,0, 1,0,0,0,0 } ,			// 30 mönster bokstav - P
		  { 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,1,0,0, 0,1,0,1,0 } ,			// 31 mönster bokstav - Q
		  { 0,0,0,0,0, 1,1,1,0,0, 1,0,0,1,0, 1,1,1,0,0, 1,0,1,0,0, 1,0,0,1,0 } ,			// 32 mönster bokstav - R
		  { 0,0,0,0,0, 0,1,1,1,0, 1,0,0,0,0, 0,1,1,1,0, 0,0,0,1,0, 1,1,1,0,0 } ,			// 33 mönster bokstav - S
		  { 0,0,0,0,0, 1,1,1,1,0, 0,1,1,0,0, 0,1,1,0,0, 0,1,1,0,0, 0,1,1,0,0 } ,			// 34 mönster bokstav - T
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0 } ,			// 35 mönster bokstav - U
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0, 0,1,1,0,0 } ,			// 36 mönster bokstav - V
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0 } ,			// 37 mönster bokstav - W
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0 } ,			// 38 mönster bokstav - X
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0, 0,1,1,0,0, 0,1,1,0,0 } ,			// 39 mönster bokstav - Y
		  { 0,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,1,0,0, 0,1,0,0,0, 1,1,1,1,0 } ,			// 40 mönster bokstav - Z
		  { 0,1,1,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,			// 41 mönster bokstav - Å
		  { 1,0,0,1,0, 0,1,1,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,			// 42 mönster bokstav - Ä
		  { 1,0,0,1,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0 } ,			// 43 mönster bokstav - Ö
};

/**** huvudprogrammet ****/
int main(void) {



   // initiering av portar (se kapitel 12 i databladet - särskilt 12.2.1)
    DDRF = 0b00000000; // alla pinnar på port F ska vara utgångar	rad
	DDRA = 0b11111111; // alla pinnar på port A ska vara utgångar	röd
    DDRC = 0b11111111; // alla pinnar på port C ska vara utgångar	grön
	DDRD = 0b11111111; // alla pinnar på port D ska vara utgångar	blå
	DDRB = 0b00000000;
	
	PORTB |= 0b00111000; // sätt bit 3,4,5.

	PORTF = 0b11111111;		//aktiverar alla rader	
	
	while(0){   ///////////////////////////////////////////////////////////////////////////********
				
		if(PB3 == 0){
			monsterval = 0; //Val av mönster från monster[val][]
			tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
			dimningsholl = 2; //Dimmar uppåt
			refrech();	
		}

		if(PB4 == 0){
			monsterval = 1; //Val av mönster från monster[val][]
			tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
			dimningsholl = 2; //Dimmar uppåt
			refrech();	
		}

		if(PB5 == 0){
			monsterval = 2; //Val av mönster från monster[val][]
			tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
			dimningsholl = 2; //Dimmar uppåt
			refrech();	
		}

	}


	while(1){   ///////////////////////////////////////////////////////////////////////////********
		if ((KNAPPAR & (1<<PB3)) == 0) { 
			monsterval = 0; //Val av mönster från monster[val][]
			tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
			dimningsholl = 2; //Dimmar uppåt
			refrech();				//Anropar refrech för att få nytt mönster
			_delay_us(1000);
		}

		if ((KNAPPAR & (1<<PB4)) == 0) { 
			monsterval = 1; //Val av mönster från monster[val][]
			tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
			dimningsholl = 2; //Dimmar uppåt
			refrech();				//Anropar refrech för att få nytt mönster
			_delay_us(1000);
		}

		if ((KNAPPAR & (1<<PB5)) == 0) { 
			monsterval = 2; //Val av mönster från monster[val][]
			tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
			dimningsholl = 2; //Dimmar uppåt
			refrech();				//Anropar refrech för att få nytt mönster
			_delay_us(1000);
		}



	}


    while(1) { // ...loopa för evigt...
			
				for(int i = 2; i < 8; i++){ //Rutnät
					monsterval = i;
					tid = 100;
					dimningsholl = 2;
					refrech();
				}

				monsterval = 0; //Val av mönster från monster[val][]
				tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
				dimningsholl = 1; //Dimmar uppåt
				dimningssteg = 1125; //6.25*tid
				refrech();				//Anropar refrech för att få nytt mönster

				monsterval = 0; //Val av mönster från monster[val][]
				tid = 120; //80=1,4s - ca 58=1s (57=1s) ???
				dimningsholl = 2; //Dimmar uppåt
				refrech();				//Anropar refrech för att få nytt mönster

				monsterval = 1; //Val av mönster från monster[val][]
				tid = 70; //70=1,2s - ca 58=1s ???
				dimningsholl = 0; //Dimmar nedåt
				dimningssteg = 0;
				refrech();				//Anropar refrech för att få nytt mönster

				monsterval = 1; //Val av mönster från monster[val][]
				tid = 80; //80=1,4s - ca 58=1s (57=1s) ???
				dimningsholl = 1; //Dimmar uppåt
				dimningssteg = 500; //6.25*tid
				refrech();				//Anropar refrech för att få nytt mönster

				monsterval = 0; //Val av mönster från monster[val][]
				tid = 70; //70=1,2s - ca 58=1s ???
				dimningsholl = 0; //Dimmar nedåt
				dimningssteg = 0;
				refrech();				//Anropar refrech för att få nytt mönster

				
					
				monsterval = 8; //Val av mönster från monster[val][]
				tid = 350; //70=1,2s - ca 58=1s ???
				dimningsholl = 2; //Dimmar nedåt
				refrech();				//Anropar refrech för att få nytt mönster
				
				
				slide(22);slide(19);slide(26);slide(26);slide(29);slide(10);slide(37);slide(29);slide(32);slide(26);slide(18);slide(14);slide(10);slide(10); //HELLO WORLD!
				
				//slide(1);
				
				//monsterval = 0; //Val av mönster från monster[val][]
				//tid = 200; //80=1,4s - ca 58=1s (57=1s) ???
				//dimningsholl = 2; //Dimmar uppåt
				//refrech();
				

				///////////////////////////////////////////////////////////////////////
				//En fungerande dimning (pumpning) 
				///////////////////////////////////////////////////////////////////////
				//monsterval = 1; //Val av mönster från monster[val][]
				//tid = 80; //80=1,4s - ca 58=1s (57=1s) ???
				//dimningsholl = 1; //Dimmar uppåt
				//dimningssteg = 500; //6.25*tid
				//refrech();				//Anropar refrech för att få nytt mönster

				//monsterval = 0; //Val av mönster från monster[val][]
				//tid = 70; //70=1,2s - ca 58=1s ???
				//dimningsholl = 0; //Dimmar nedåt
				//dimningssteg = 0;
				//refrech();				//Anropar refrech för att få nytt mönster
				///////////////////////////////////////////////////////////////////////
				//Lång dimning, dock blinkig.
				///////////////////////////////////////////////////////////////////////
				//monsterval = 1; //Val av mönster från monster[val][]
				//tid = 400; //80=1,4s - ca 58=1s (57=1s) ???
				//dimningsholl = 1; //Dimmar uppåt
				//dimningssteg = 2500; //6.25*tid
				//refrech();				//Anropar refrech för att få nytt mönster

				//monsterval = 0; //Val av mönster från monster[val][]
				//tid = 700; //70=1,2s - ca 58=1s ???
				//dimningsholl = 0; //Dimmar nedåt
				//dimningssteg = 0;
				//refrech();

				
				
	}

}
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Val av microprocessor, RGB LED styrning

Inlägg av sodjan »

OK, problemet är alltså avläsningen av ett par knappar. För det
behövs ju inte flera hundra rader med kod. Fokusera ett litet
tag på *just det* och inget annat!

Du gör ett litet testprogram med *enbart* läsningen av knapparna.
En simpel loop med din läsning av knappen och som t.ex
tänder/släcker en LED eller liknande för indikering. Borde blir
10-15 rader som mest med initiering o.s.v.

*Sedan*, om det fortfarande inte fungerar, så postar du test-programmet
så att vi inte behöver läsa hundratals rader med kod som inte har
med det aktuella problemet att göra.

Gör det till en vana att göra små testprogram för allt möjligt som
antingen inte fungerar eller bara är nytt (för att verifiera att/om det
fungerar). Lägg aldrig in något nytt/oprövat i ett redan stort program,
det blir ett helvete att felsöka det hela...
dragon9226
Inlägg: 144
Blev medlem: 8 september 2010, 14:26:12

Re: Val av microprocessor, RGB LED styrning

Inlägg av dragon9226 »

Ok.
Får göra det en annan dag, då jag behöver sova nu.
Tack för hjälpen.

Om någon vill så kan den skriva ett enkelt program, behöver ej vara fullständigt, med den kod som jag behöver för själva knapp avläsandet.
Tack på förhand, och god natt!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Val av microprocessor, RGB LED styrning

Inlägg av sodjan »

Ja, vad är det det heter ? Det är bättre att lära den hungrige att
fiska än att ge honom en fisk varje dag. Eller något i den stilen... :-)

D.v.s det är bättre att visa på lite bra/bättre utvecklingsmetoder
än att fixa varje liten grej som kommer upp. Det gör att det
kommer att gå snabbare för din utveckling totalt sett över tiden.

> med den kod som jag behöver för själva knapp avläsandet.

Pinnen ska vara ingång.
Interna pullup ska vara på (eller extern pullup).

Tja, det är väl i princip det.
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 »

Min dotter vaknade och var ledsen... nu sover hon igen...

Jag kan se ett fel i din kod när det gäller knapparna och if-satsen:

Kod: Markera allt

if ((KNAPPAR & (1<<PB5)) == 0) { 
jag kollade vad KNAPPAR var för något och det står:

Kod: Markera allt

   #define KNAPPAR PORTB
Porten heter visserligen PORT B, men för att avläsa porten så är det PINB som gäller. Så detta skall vara rätt:

Kod: Markera allt

   #define KNAPPAR PINB
EDIT:

och dessa fungerar inte alls:

Kod: Markera allt

 if(PB3 == 0){
Senast redigerad av jesse 2 mars 2011, 01:02:10, redigerad totalt 1 gång.
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 har skummat igenom koden och jag är imponerad av hur snyggt programmet är. Du fick ju ihop slide-rutinen fint (har inte orkat sätta mig in i den , men koden blev ju kompakt och fin).

Angående "Hello World" så har jag lite idéer.

Det kan ju vara lite bökigt att leta upp siffran för varje bokstav när du ska skriva något. Därför kan det vara bra om det går att översätta från ascii.

Kolla in den här tabellen: ASCII
De intressanta kolumnerna är "DEC" och "symbol".
De vettiga tecknen börjar vid DEC=32 "mellanslag" och framåt....
48 är '0', 49 är '1' osv... och 'A'=65, 'B'=66,'C'=67 osv... Detta kan du använda i programmeringen:
char a=65 och char a='A' är samma sak. Bokstaven 'A' är bara en symbol som har numret 65.

om du skapar följande funktion:

Kod: Markera allt

void tecken(ascii) {
    return ascii-32;
}
och ordnar tecknen i listan i samma ordningsföljd som i ascii-tabellen (nr 0 = mellanslag, 1 = utropstecken osv... (de tecken du inte har färdiga ännu kan du hoppa över genom att fylla ut med bara nollor). För att få med Å , Ä och Ö utan att behöva ha en superlång tabell med mest nollor så kan du göra en speciell if-sats för dessa tecken:

Kod: Markera allt

void tecken(ascii) {
    if      (ascii='Å') ascii = 91; // (nr 91 kommer direkt efter 'Z' i tabellen)
    else if (ascii='Ä') ascii = 92; 
    else if (ascii='Ö') ascii = 93; 
    return ascii-32; // korrigera tabellnummer
}
Och en ny slide-funktion för ascii-tecken:

Kod: Markera allt

void aslide(ascii) { slide(tecken(ascii)); }

//Hello World!
aslide('H');aslide('E');aslide('L');aslide('L');aslide('O');aslide(' ');aslide('W');aslide('O');aslide('R');aslide('L');aslide('D');aslide('!');
eller ännu mer automatiskt genom att du skriver hela meningen som en textrad i programminnet:

Kod: Markera allt

char PROGMEM HelloWorld[] = "HELLO WORLD!";
char PROGMEM text2[] = "TESTAR ETT TVÅ TRE...";

void slideLine(ord) {
    for (char i=0; i<sizeof(ord); i++) { // gå igenom hela ordet tecken för tecken
        char tkn = pgm_read_byte(&ord[i]); // läs in tecken från programminne
        aslide(tkn); // rulla ut tecken...
    }
}
... och i main skriver du bara ...

Kod: Markera allt

slideLine(HelloWorld);
slideLine(text2);
Det är nog bäst att jag också går och lägger mig nu :sleepy:
dragon9226
Inlägg: 144
Blev medlem: 8 september 2010, 14:26:12

Re: Val av microprocessor, RGB LED styrning

Inlägg av dragon9226 »

Tack Jesse.
Hinner inte läsa dit långa inlägg nu, men det korta gjorde att knapparna fungerar.
Tack så otroligt mycket!
Litet fel, stora konsekvenser...

Tilläg:
Det ända felet nu är att efter att hela skärmen lyses upp en kort stund så lyser en rad, när det ska vara släkt.
Men får ta och kolla på det senare.
Återigen TACK!
Zeela
Inlägg: 176
Blev medlem: 28 augusti 2008, 11:23:49
Ort: Åtvidaberg
Kontakt:

Re: Val av microprocessor, RGB LED styrning

Inlägg av Zeela »

[quote="jesse"]För att få med Å , Ä och Ö utan att behöva ha en superlång tabell med mest nollor så kan du göra en speciell if-sats för dessa tecken:

Kod: Markera allt

void tecken(ascii) {
    if      (ascii='Å') ascii = 91; // (nr 91 kommer direkt efter 'Z' i tabellen)
    else if (ascii='Ä') ascii = 92; 
    else if (ascii='Ö') ascii = 93; 
    return ascii-32; // korrigera tabellnummer
}
Hmmm....

Är det inte
Å = 93
Ä = 91
Ö = 92

Lite rostig på ASCII-tabellen men de svenska tecknen kommer inte i "rätt" ordning.
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 »

jo, den alternativa svenska ascii-tabellen har ju faktiskt ordningen ÄÅÖ, inte ÅÄÖ. Så det kan ju vara bra att använda den ordningen. Fast just i det här programmet har det ingen praktisk betydelse. Bara de kommer i samma ordning som de anges i tabellen:

Kod: Markera allt

    ...
        { 0,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,1,0,0, 0,1,0,0,0, 1,1,1,1,0 } ,         // 90 mönster bokstav - Z
        { 0,1,1,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,         // 91 mönster bokstav - Å
        { 1,0,0,1,0, 0,1,1,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,         // 92 mönster bokstav - Ä
        { 1,0,0,1,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0 } ,         // 93 mönster bokstav - Ö

Här nedan har jag ändrat ordningen på tecknen så de stämmer med ascii-tabellen.
Tabellen börjar alltså med 32 = mellanslag.

Kod: Markera allt

// *** tecken: koder enligt Svenska ascii-tabellen från 32 till 93 ***
uint8_t PROGMEM tecken[44][30] = {
        { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 } ,         // 32 mönster mellanslag ' '
        { 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 1,1,0,0,0 } ,         // 33 mönster '!'
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 34 mönster '-' *** ej klart ***
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 35 mönster '' *** ej klart ***
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 36 mönster '' *** ej klart ***
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 37 mönster '' *** ej klart ***
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 38 mönster '' *** ej klart ***
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 39 mönster '' *** ej klart ***
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 40 mönster '' *** ej klart ***
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 41 mönster '' *** ej klart ***
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 42 mönster '' *** ej klart ***
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 43 mönster '' *** ej klart ***
        { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0, 1,1,0,0,0 } ,         // 44 mönster ','
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 45 mönster '' *** ej klart ***
        { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0 } ,         // 46 mönster '.'
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 47 mönster '' *** ej klart ***
        { 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 } ,         // 48 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 } ,         // 49 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 } ,         // 50 mönster siffra - 2 
   ....osv....
        { 0,0,0,0,0, 1,1,1,1,0, 1,0,0,1,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,0,1,0 } ,         // 57 mönster siffra - 9
        { 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0 } ,         // 58 mönster ':'
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 59 mönster '' *** ej klart ***
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 60 mönster '' *** ej klart ***
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 61 mönster '' *** ej klart ***
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 62 mönster '' *** ej klart ***
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 63 mönster '' *** ej klart ***
        { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1 } ,         // 64 mönster '' *** ej klart ***
        { 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,         // 65 mönster bokstav - A
        { 0,0,0,0,0, 1,1,1,0,0, 1,0,0,1,0, 1,1,1,0,0, 1,0,0,1,0, 1,1,1,0,0 } ,         // 66 mönster bokstav - B
        { 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,0,0, 1,0,0,1,0, 0,1,1,0,0 } ,         // 67 mönster bokstav - C
   ....osv....
        { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0, 0,1,1,0,0, 0,1,1,0,0 } ,         // 89 mönster bokstav - Y
        { 0,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,1,0,0, 0,1,0,0,0, 1,1,1,1,0 } ,         // 90 mönster bokstav - Z
        { 1,0,0,1,0, 0,1,1,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,         // 91 mönster bokstav - Ä
        { 0,1,1,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,         // 92 mönster bokstav - Å
        { 1,0,0,1,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0 } ,         // 93 mönster bokstav - Ö
};
dragon9226
Inlägg: 144
Blev medlem: 8 september 2010, 14:26:12

Re: Val av microprocessor, RGB LED styrning

Inlägg av dragon9226 »

Ok, tack för den listan, den ska jag använda när jag får den nya slidern att fungera.
Dock bli det en hel del fel...
Har försökt att åtgärda dem, men inte lyckats med alla...

Kod: Markera allt



//---------------- standardbibliotek ------------------
   // #define F_CPU 8000000   för att använda intern 8 MHz osilator
   #include <avr/io.h>
   #include <util/delay.h>
   #include <util/delay_basic.h>
   #include <avr/pgmspace.h>

   #define CLOCK (1<<PB1)

   #define ROW PORTF
   #define RED PORTA
   #define GREEN PORTC
   #define BLUE PORTD
   #define KNAPPAR PINB
   uint8_t knappar;
   //#define knappar PORTB //3.4.5
   //if ((KNAPPAR & (1<<PB3)) == 0) { ... //knapp vid PORTB.3 nedtryckt ... }
   
   uint8_t dimningsholl; //Dimningsvariabel, 1=upp, 0=ned
   uint16_t dimningssteg = 1; //Variabel för hur dimningen uppför sig?
   uint8_t pixelnr;
   uint16_t tid = 1;
   uint8_t ROWNR;
   uint8_t monster[9][48];
   uint8_t tecken[44][30];
   uint8_t monsterval;
   uint8_t colour;
   uint8_t red = 0b00000000;
   uint8_t green = 0b00000000;
   uint8_t blue = 0b00000000;

   uint8_t redscroll[6];
   uint8_t bluescroll[6];
   uint8_t greenscroll[6];
/////////////////////////////////////////////////////////////////////////////////////****
   char ascii;
   char ord[];
/////////////////////////////////////////////////////////////////////////////////////****

void refrech() {	// SKRIV ALGORITM HÄR
	
	for(int varv = 0; varv < tid; varv++){
	pixelnr = 0;
	ROWNR = 0b00100000;	
		for(int y = 0; y < 6; y++){	
			for(int x = 0; x < 8; x++){
				red <<= 1;
				green >>= 1;
				blue >>= 1;
				colour = pgm_read_byte(&monster [monsterval][(x+y*8)]);
				if (colour & 1) blue |= 0b10000000;	//Blå
				if (colour & 2) green |= 0b10000000;	//Grön
				if (colour & 4) red |= 0b00000001;	//röd
				pixelnr++;
			}
			ROW = ROWNR;
			RED = red;
			GREEN = green;
			BLUE = blue;
			ROWNR  >>= 1;
			_delay_ms(1);

			if((dimningsholl == 0) | (dimningsholl == 1)){
				ROW = 0b00000000;
				RED = 0b00000000;
				GREEN = 0b00000000;
				BLUE = 0b00000000;
				
				if(dimningsholl == 0){
					dimningssteg++;
					for(int z = 0; z < (dimningssteg); z++){	
						_delay_us(6); //var 6
					}
				}
				
				if(dimningsholl == 1){
					dimningssteg--;
					for(int z = 0; z < (dimningssteg); z++){	
						_delay_us(6); //var 6
					}
				}
			}

			//for(int z = 0; z < dimningssteg; z++){	
			//	_delay_us(6); //var 6
			//}
			//if(dimningsholl == 0) dimningssteg++;
			//if(dimningsholl == 1) dimningssteg--;

		}
	}
}

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

	//red = 0b00000000;
    //green = 0b00000000;
    //blue = 0b00000000;	
	//for(int z = 0; z < 1; z++){
		
		for(int x = 0; x < 5; x++){
			//ROWNR = 0b00100000;
			for(int z = 0; z < 6; z++){
				redscroll[z] <<= 1;
				greenscroll[z] >>= 1;
				bluescroll[z] >>= 1;
			}
			//for(int y = 0; y < 6; y++){
			//for(int i = 0; i < 200; i++){
				for(int z = 0; z < 6; z++){	
					colour = pgm_read_byte(&tecken [teckenval][(x+z*5)]);
					if (colour & 1) bluescroll[z] |= 0b10000000;	//Blå
					if (colour & 2) greenscroll[z] |= 0b10000000;//Grön
					if (colour & 4) redscroll[z] |= 0b00000001;	//röd
					//pixelnr++;	
				}
				for(int i = 0; i < 7; i ++){
					ROWNR = 0b00100000;
					for(int z = 0; z < 6; z++){
						ROW = ROWNR;
						RED = redscroll[z];
						GREEN = greenscroll[z];
						BLUE = bluescroll[z];
						ROWNR  >>= 1;
						_delay_us(3500);
					}
				}
			//}
			//}
				
			
		}
	//}
	
}


/////////////////////////////////////////////////////////////////////////////////////****
void slideLine(char ord) {
    for (char i=0; i<sizeof(ord); i++) { // gå igenom hela ordet tecken för tecken
        char tkn = pgm_read_byte(&ord[i]); // läs in tecken från programminne                            ////145
        aslide(tkn); // rulla ut tecken...                                                                                 ////146
    }
}

void aslide(char ascii) { slide(teckenverifiering(ascii)); }                                                        ////150

//void tecken(ascii) {
//    return ascii-32;
//}

char teckenverifiering(char ascii) {                                                                                     ////156
    if      (ascii=='Å') {ascii = 91;} // (nr 91 kommer direkt efter 'Z' i tabellen)
    else if (ascii=='Ä') {ascii = 92;}
    else if (ascii=='Ö') {ascii = 93;}
    return (ascii);// - 32); // korrigera tabellnummer
}

char PROGMEM HelloWorld[] = "HELLO WORLD!";
char PROGMEM text2[] = "TESTAR ETT TVÅ TRE...";

/////////////////////////////////////////////////////////////////////////////////////****

uint8_t PROGMEM monster[9][48] = {
          { 2,4,4,2,2,2,4,2, 4,2,2,4,2,4,4,2, 2,2,4,2,2,2,4,2, 2,4,2,2,2,2,4,2, 4,4,4,4,2,4,4,4, 2,2,2,2,2,2,2,2 } ,                // grön21, röd bakgrund. mönster nr 0
          { 4,2,2,4,4,4,2,4, 2,4,4,2,4,2,2,4, 4,4,2,4,4,4,2,4, 4,2,4,4,4,4,2,4, 2,2,2,2,4,2,2,2, 4,4,4,4,4,4,4,4 } ,                // röd21, grön bakgrund. mönster nr 1
          { 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0 } ,				// Rutmönster blå
		  { 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0 } ,				// Rutmönster grön
		  { 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0 } ,				// Rutmönster röd
		  { 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1 } ,				// Rutmönster blå motvänd
		  { 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2 } ,				// Rutmönster grön motvänd
		  { 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4 } ,				// Rutmönster röd  motvänd
		  { 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, } ,				// Färgtest
};

uint8_t PROGMEM tecken[44][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 } ,			// 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 } ,			// 1 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 } ,			// 2 mönster siffra - 2 
		  { 0,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 0,1,1,1,0, 0,0,0,1,0, 1,1,1,1,0 } ,			// 3 mönster siffra - 3
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,0,1,0 } ,			// 4 mönster siffra - 4
		  { 0,0,0,0,0, 1,1,1,1,0, 1,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 1,1,1,1,0 } ,			// 5 mönster siffra - 5
		  { 0,0,0,0,0, 1,1,1,1,0, 1,0,0,0,0, 1,1,1,1,0, 1,0,0,1,0, 1,1,1,1,0 } ,			// 6 mönster siffra - 6
		  { 0,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,0,1,0, 0,0,0,1,0, 0,0,0,1,0 } ,			// 7 mönster siffra - 7
		  { 0,0,0,0,0, 1,1,1,1,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,1,1,1,0 } ,			// 8 mönster siffra - 8
		  { 0,0,0,0,0, 1,1,1,1,0, 1,0,0,1,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,0,1,0 } ,			// 9 mönster siffra - 9
		  { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 } ,			// 10 mönster mellanslag ' '
		  { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0 } ,			// 11 mönster '.'
		  { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0, 1,1,0,0,0 } ,			// 12 mönster ','
		  { 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0 } ,			// 13 mönster ':'
		  { 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 1,1,0,0,0 } ,			// 14 mönster '!'
		  { 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,			// 15 mönster bokstav - A
		  { 0,0,0,0,0, 1,1,1,0,0, 1,0,0,1,0, 1,1,1,0,0, 1,0,0,1,0, 1,1,1,0,0 } ,			// 16 mönster bokstav - B
		  { 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,0,0, 1,0,0,1,0, 0,1,1,0,0 } ,			// 17 mönster bokstav - C
		  { 0,0,0,0,0, 1,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,1,1,0,0 } ,			// 18 mönster bokstav - D
		  { 0,0,0,0,0, 1,1,1,1,0, 1,0,0,0,0, 1,1,1,0,0, 1,0,0,0,0, 1,1,1,1,0 } ,			// 19 mönster bokstav - E
		  { 0,0,0,0,0, 1,1,1,1,0, 1,0,0,0,0, 1,1,1,0,0, 1,0,0,0,0, 1,0,0,0,0 } ,			// 20 mönster bokstav - F
		  { 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,0,0, 1,0,1,1,0, 0,1,1,0,0 } ,			// 21 mönster bokstav - G
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,			// 22 mönster bokstav - H
		  { 0,0,0,0,0, 0,1,1,1,0, 0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 0,1,1,1,0 } ,			// 23 mönster bokstav - I
		  { 0,0,0,0,0, 0,0,1,1,0, 0,0,0,1,0, 0,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0 } ,			// 24 mönster bokstav - J
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,1,0,0, 1,1,0,0,0, 1,0,1,0,0, 1,0,0,1,0 } ,			// 25 mönster bokstav - K
		  { 0,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,1,1,1,0 } ,			// 26 mönster bokstav - L
		  { 0,0,0,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,			// 27 mönster bokstav - M ???
		  { 0,0,0,0,0, 1,0,0,1,0, 1,1,0,1,0, 1,1,1,1,0, 1,0,1,1,0, 1,0,0,1,0 } ,			// 28 mönster bokstav - N ???
		  { 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0 } ,			// 29 mönster bokstav - O
		  { 0,0,0,0,0, 1,1,1,0,0, 1,0,0,1,0, 1,1,1,0,0, 1,0,0,0,0, 1,0,0,0,0 } ,			// 30 mönster bokstav - P
		  { 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,1,0,0, 0,1,0,1,0 } ,			// 31 mönster bokstav - Q
		  { 0,0,0,0,0, 1,1,1,0,0, 1,0,0,1,0, 1,1,1,0,0, 1,0,1,0,0, 1,0,0,1,0 } ,			// 32 mönster bokstav - R
		  { 0,0,0,0,0, 0,1,1,1,0, 1,0,0,0,0, 0,1,1,1,0, 0,0,0,1,0, 1,1,1,0,0 } ,			// 33 mönster bokstav - S
		  { 0,0,0,0,0, 1,1,1,1,0, 0,1,1,0,0, 0,1,1,0,0, 0,1,1,0,0, 0,1,1,0,0 } ,			// 34 mönster bokstav - T
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0 } ,			// 35 mönster bokstav - U
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0, 0,1,1,0,0 } ,			// 36 mönster bokstav - V
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0 } ,			// 37 mönster bokstav - W
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0 } ,			// 38 mönster bokstav - X
		  { 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0, 0,1,1,0,0, 0,1,1,0,0 } ,			// 39 mönster bokstav - Y
		  { 0,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,1,0,0, 0,1,0,0,0, 1,1,1,1,0 } ,			// 40 mönster bokstav - Z
		  { 0,1,1,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,			// 41 mönster bokstav - Å
		  { 1,0,0,1,0, 0,1,1,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } ,			// 42 mönster bokstav - Ä
		  { 1,0,0,1,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0 } ,			// 43 mönster bokstav - Ö
};

/**** huvudprogrammet ****/
int main(void) {



   // initiering av portar (se kapitel 12 i databladet - särskilt 12.2.1)
    DDRF = 0b00000000; // alla pinnar på port F ska vara utgångar	rad
	DDRA = 0b11111111; // alla pinnar på port A ska vara utgångar	röd
    DDRC = 0b11111111; // alla pinnar på port C ska vara utgångar	grön
	DDRD = 0b11111111; // alla pinnar på port D ska vara utgångar	blå
	DDRB = 0b00000000;
	
	PORTB |= 0b00111000; // sätt bit 3,4,5.

	PORTF = 0b11111111;		//aktiverar alla rader	
	
	


	while(1){   //Knappupptagning
		if ((KNAPPAR & (1<<PB3)) == 0) { 
			monsterval = 0; //Val av mönster från monster[val][]
			tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
			dimningsholl = 2; //Dimmar uppåt
			refrech();				//Anropar refrech för att få nytt mönster
			_delay_us(1000);
		}

		if ((KNAPPAR & (1<<PB4)) == 0) { 
			monsterval = 1; //Val av mönster från monster[val][]
			tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
			dimningsholl = 2; //Dimmar uppåt
			refrech();				//Anropar refrech för att få nytt mönster
			_delay_us(1000);
		}

		if ((KNAPPAR & (1<<PB5)) == 0) { 
			monsterval = 2; //Val av mönster från monster[val][]
			tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
			dimningsholl = 2; //Dimmar uppåt
			refrech();				//Anropar refrech för att få nytt mönster
			_delay_us(1000);
		}



	}


    
				//slide(22);slide(19);slide(26);slide(26);slide(29);slide(10);slide(37);slide(29);slide(32);slide(26);slide(18);slide(14);slide(10);slide(10); //HELLO WORLD!
				
				
				
	

}
../Ledmatris_6x8_v1.c:145: error: subscripted value is neither array nor pointer
../Ledmatris_6x8_v1.c:146: warning: implicit declaration of function 'aslide'
../Ledmatris_6x8_v1.c: At top level:
../Ledmatris_6x8_v1.c:150: warning: conflicting types for 'aslide'
../Ledmatris_6x8_v1.c:146: warning: previous implicit declaration of 'aslide' was here
../Ledmatris_6x8_v1.c: In function 'aslide':
../Ledmatris_6x8_v1.c:150: warning: implicit declaration of function 'teckenverifiering'
../Ledmatris_6x8_v1.c: At top level:
../Ledmatris_6x8_v1.c:156: error: conflicting types for 'teckenverifiering'
../Ledmatris_6x8_v1.c:150: error: previous implicit declaration of 'teckenverifiering' was here
make: *** [Ledmatris_6x8_v1.o] Error 1
Build failed with 3 errors and 4 warnings...
Dessa fel uppstår, nu när jag ändrat en del...
Det är dock möjligt att jag skapat nya fel, vilka jag trodde var rätt...
(Mellan "/////////////////////////////////////////////////////////////////////////////////////****" är den nya koden.)

Tillägg:
Lade till markering för de berörda raderna. Beklagar att jag inte tänkte på radnumreringen tidigare..
dragon9226
Inlägg: 144
Blev medlem: 8 september 2010, 14:26:12

Re: Val av microprocessor, RGB LED styrning

Inlägg av dragon9226 »

Lade till radnumrering för de berörda rader i förra inlägget.
Beklagar att jag inte tänkte på det tidigare..
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 »

error rad 146: beror nog på att void slideLine(char ord) { ska vara void slideLine(char[] ord) {
Jag slarvade lite när jag skrev exemplet.

error rad 150 och 156: beror på att definitionen av funktionen (rad 156) kommer efter användningen av den (rad150).
Detta kan lösas genom att flytta hela funktionen teckenverifiering så att den hamnar ovanför aslide.
dragon9226
Inlägg: 144
Blev medlem: 8 september 2010, 14:26:12

Re: Val av microprocessor, RGB LED styrning

Inlägg av dragon9226 »

Så där ja. Där satt felen.
Ändrade även till ACII ordning bland tecknen. Så nu fungerar allt förutom avkänningen av hur långt "ord" är. Det blir bara två, när det egentligen är 13...
Men om jag byter ut avkänningen till en siffra så fungerar det....

Tillägg:
Koden:

Kod: Markera allt

void slideLine(char ord[]) {
    for (uint8_t i = 0; i < sizeof(ord); i++) { // gå igenom hela ordet tecken för tecken   //sizeof(ord[] blir alltid = 2....
        char tkn = pgm_read_byte(&ord[i]); // läs in tecken från programminne
        aslide(tkn); // rulla ut tecken...
    }
}
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 »

hehe, säkert jag som klantat mig igen :mrgreen:
kommer dock inte på någon lösning just nu... :humm:

EDIT: så här ser min egen "print"-funktion ut. Den använder pekare:

Kod: Markera allt

void print(const uint8_t * string) {
	uint8_t tecken;
	while(1) {
		tecken = pgm_read_byte(string++);
		if (tecken == 0) break;
		putChar(tecken);
	}
}
Virror
Inlägg: 1025
Blev medlem: 28 april 2004, 11:03:14
Ort: Göteborg
Kontakt:

Re: Val av microprocessor, RGB LED styrning

Inlägg av Virror »

Kan inte skriva sizeof(ord), detta ger bara längden på ett ord, inte hela arrayen.
Du måste använda tex strlen(ord) eller nått dylikt.
Tror dock du måste inkludera string.h då...
Skriv svar