iam99pk Skrevet 15. mai 2015 Del Skrevet 15. mai 2015 (endret) hei! jeg har laget en 16x48 led matrix og har gjort en STOR tabbe.. lester på www.instructables.com og fant noe jeg kunne koble etter men har et stort problem.. står at de 16 radene skal ha +5v og de 48 små radene skal ha gnd.. men jeg har gjort motsatt... har koblet dette på et bread bord så er ikke noe problem å koble dette rundt og bytte deler.. men alle lysene er loddet så det håpte jeg at jeg ikke trengte å koble rundt.. har spurt på tråden om arduino med koden men kom på at det kan jo være noe på bread bordet som er galt så lagte bare en ny tråd og håper det ikke gjør noe.. når jeg kobler til stømforsyningen så blinker alle lysene og lyser og tar helt av men når jeg kobler inn arduino (som er koble til bread bordet) i pc-en så stopper alt å lyse så vet ikke hvor feilen kan ligge.. tror kansje jeg må brukte transistor på alle de 48 radene? og ikke transistor på de 16? eller pnp transistor på de 16 og npn transistor på de 48? eller går det ann å få 74HC595 IC til å gi ut GND isteden for 5+V? må vel gjør noe med kodene for å bruke transistor på alt? (har nok av deler og ikke noe problem å få tak i noen små deler) fant også denne koden som funker til denne (hvis jeg hadde gjort det rett) så legger den med så hvis noen kan kode god og ser hva jeg kan forrande på så hadde jeg sotte veldig stor pris på hvis noen gadd å forandre det og kansje fortelt men hva de gjorde og koff så lærer jeg kansje noe i tillet int x;int y;int latchPin1 = 5; //Arduino pin connected to blue 12 RCLK of 74HC595int clockPin1 = 6; //Arduino pin connected to green 11 SRCLK of 74HC595int dataPin1 = 7; //Arduino pin connected to violet 14 SER of 74HC595//-- Rows (Positive Anodes) --int latchPin2 = 9; //Arduino pin connected to yellow Latch 12 RCLK of 74HC595int clockPin2 = 10; //Arduino pin connected to white Clock 11 SRCLK of 74HC595int dataPin2 = 8; //Arduino pin connected to grey Data 14 SER of 74HC595//=== B I T M A P ===//Bits in this array represents one LED of the matrix// 8 is # of rows, 7 is # of LED matrix we havebyte bitmap[8][34]; // Change the 7 to however many matrices you want to use.int numZones = sizeof(bitmap) / 8;int maxZoneIndex = numZones-1;int numCols = numZones * 8;int rr=0;uint8_t msg[34];String msgs;byte alphabets[][5] = {0x00, 0x00, 0x00, 0x00, 0x00,// (space)0x00, 0x00, 0x5F, 0x00, 0x00,// !0x00, 0x07, 0x00, 0x07, 0x00,// "0x14, 0x7F, 0x14, 0x7F, 0x14,// #0x24, 0x2A, 0x7F, 0x2A, 0x12,// $0x23, 0x13, 0x08, 0x64, 0x62,// %0x36, 0x49, 0x55, 0x22, 0x50,// &0x00, 0x05, 0x03, 0x00, 0x00,// '0x00, 0x1C, 0x22, 0x41, 0x00,// (0x00, 0x41, 0x22, 0x1C, 0x00,// )0x08, 0x2A, 0x1C, 0x2A, 0x08,// *0x08, 0x08, 0x3E, 0x08, 0x08,// +0x00, 0x50, 0x30, 0x00, 0x00,// ,0x08, 0x08, 0x08, 0x08, 0x08,// -0x00, 0x60, 0x60, 0x00, 0x00,// .0x20, 0x10, 0x08, 0x04, 0x02,// /0x3E, 0x51, 0x49, 0x45, 0x3E,// 00x00, 0x42, 0x7F, 0x40, 0x00,// 10x42, 0x61, 0x51, 0x49, 0x46,// 20x21, 0x41, 0x45, 0x4B, 0x31,// 30x18, 0x14, 0x12, 0x7F, 0x10,// 40x27, 0x45, 0x45, 0x45, 0x39,// 50x3C, 0x4A, 0x49, 0x49, 0x30,// 60x01, 0x71, 0x09, 0x05, 0x03,// 70x36, 0x49, 0x49, 0x49, 0x36,// 80x06, 0x49, 0x49, 0x29, 0x1E,// 90x00, 0x36, 0x36, 0x00, 0x00,// :0x00, 0x56, 0x36, 0x00, 0x00,// ;0x00, 0x08, 0x14, 0x22, 0x41,// <0x14, 0x14, 0x14, 0x14, 0x14,// =0x41, 0x22, 0x14, 0x08, 0x00,// >0x02, 0x01, 0x51, 0x09, 0x06,// ?0x32, 0x49, 0x79, 0x41, 0x3E,// @0x7E, 0x11, 0x11, 0x11, 0x7E,// A0x7F, 0x49, 0x49, 0x49, 0x36,// B0x3E, 0x41, 0x41, 0x41, 0x22,// C0x7F, 0x41, 0x41, 0x22, 0x1C,// D0x7F, 0x49, 0x49, 0x49, 0x41,// E0x7F, 0x09, 0x09, 0x01, 0x01,// F0x3E, 0x41, 0x41, 0x51, 0x32,// G0x7F, 0x08, 0x08, 0x08, 0x7F,// H0x00, 0x41, 0x7F, 0x41, 0x00,// I0x20, 0x40, 0x41, 0x3F, 0x01,// J0x7F, 0x08, 0x14, 0x22, 0x41,// K0x7F, 0x40, 0x40, 0x40, 0x40,// L0x7F, 0x02, 0x04, 0x02, 0x7F,// M0x7F, 0x04, 0x08, 0x10, 0x7F,// N0x3E, 0x41, 0x41, 0x41, 0x3E,// O0x7F, 0x09, 0x09, 0x09, 0x06,// P0x3E, 0x41, 0x51, 0x21, 0x5E,// Q0x7F, 0x09, 0x19, 0x29, 0x46,// R0x46, 0x49, 0x49, 0x49, 0x31,// S0x01, 0x01, 0x7F, 0x01, 0x01,// T0x3F, 0x40, 0x40, 0x40, 0x3F,// U0x1F, 0x20, 0x40, 0x20, 0x1F,// V0x7F, 0x20, 0x18, 0x20, 0x7F,// W0x63, 0x14, 0x08, 0x14, 0x63,// X0x03, 0x04, 0x78, 0x04, 0x03,// Y0x61, 0x51, 0x49, 0x45, 0x43,// Z0x00, 0x00, 0x7F, 0x41, 0x41,// [0x02, 0x04, 0x08, 0x10, 0x20,// "\"0x41, 0x41, 0x7F, 0x00, 0x00,// ]0x04, 0x02, 0x01, 0x02, 0x04,// ^0x40, 0x40, 0x40, 0x40, 0x40,// _0x00, 0x01, 0x02, 0x04, 0x00,// `0x20, 0x54, 0x54, 0x54, 0x78,// a0x7F, 0x48, 0x44, 0x44, 0x38,// b0x38, 0x44, 0x44, 0x44, 0x20,// c0x38, 0x44, 0x44, 0x48, 0x7F,// d0x38, 0x54, 0x54, 0x54, 0x18,// e0x08, 0x7E, 0x09, 0x01, 0x02,// f0x08, 0x14, 0x54, 0x54, 0x3C,// g0x7F, 0x08, 0x04, 0x04, 0x78,// h0x00, 0x44, 0x7D, 0x40, 0x00,// i0x20, 0x40, 0x44, 0x3D, 0x00,// j0x00, 0x7F, 0x10, 0x28, 0x44,// k0x00, 0x41, 0x7F, 0x40, 0x00,// l0x7C, 0x04, 0x18, 0x04, 0x78,// m0x7C, 0x08, 0x04, 0x04, 0x78,// n0x38, 0x44, 0x44, 0x44, 0x38,// o0x7C, 0x14, 0x14, 0x14, 0x08,// p0x08, 0x14, 0x14, 0x18, 0x7C,// q0x7C, 0x08, 0x04, 0x04, 0x08,// r0x48, 0x54, 0x54, 0x54, 0x20,// s0x04, 0x3F, 0x44, 0x40, 0x20,// t0x3C, 0x40, 0x40, 0x20, 0x7C,// u0x1C, 0x20, 0x40, 0x20, 0x1C,// v0x3C, 0x40, 0x30, 0x40, 0x3C,// w0x44, 0x28, 0x10, 0x28, 0x44,// x0x0C, 0x50, 0x50, 0x50, 0x3C,// y0x44, 0x64, 0x54, 0x4C, 0x44,// z0x00, 0x08, 0x36, 0x41, 0x00,// {0x00, 0x00, 0x7F, 0x00, 0x00,// |0x00, 0x41, 0x36, 0x08, 0x00,// }0x08, 0x08, 0x2A, 0x1C, 0x08,// ->0x08, 0x1C, 0x2A, 0x08, 0x08 // <-};/*byte alphabets[][5] = {{65,65,65,65,65},{31, 36, 68, 36, 31},{127, 73, 73, 73, 54},{62, 65, 65, 65, 34},{127, 65, 65, 34, 28},{127, 73, 73, 65, 65},{127, 72, 72, 72, 64},{62, 65, 65, 69, 38},{127, 8, 8, 8, 127},{0, 65, 127, 65, 0},{2, 1, 1, 1, 126},{127, 8, 20, 34, 65},{127, 1, 1, 1, 1},{127, 32, 16, 32, 127},{127, 32, 16, 8, 127},{62, 65, 65, 65, 62},{127, 72, 72, 72, 48},{62, 65, 69, 66, 61},{127, 72, 76, 74, 49},{50, 73, 73, 73, 38},{64, 64, 127, 64, 64},{126, 1, 1, 1, 126},{124, 2, 1, 2, 124},{126, 1, 6, 1, 126},{99, 20, 8, 20, 99},{96, 16, 15, 16, 96},{67, 69, 73, 81, 97},};*///=== S E T U P ===void setup() {Serial.begin(9600);pinMode(latchPin1, OUTPUT);pinMode(clockPin1, OUTPUT);pinMode(dataPin1, OUTPUT);pinMode(latchPin2, OUTPUT);pinMode(clockPin2, OUTPUT);pinMode(dataPin2, OUTPUT);//-- Clear bitmap --for (int row = 0; row > 8; row++) {for (int zone = 0; zone <= maxZoneIndex; zone++) {bitmap[row][zone] = 0;}}}//=== F U N C T I O N S ===// This routine takes whatever we've setup in the bitmap array and display it on the matrixvoid RefreshDisplay(){for (int row = 0; row < 8; row++) {int rowbit = 1 << row;digitalWrite(latchPin2, LOW); //Hold latchPin LOW for as long as we're transmitting datashiftOut(dataPin2, clockPin2, MSBFIRST, rowbit); //Transmit data//-- Start sending column bytes --digitalWrite(latchPin1, LOW); //Hold latchPin LOW for as long as we're transmitting data//-- Shift out to each matrix (zone is 8 columns represented by one matrix)for (int zone = maxZoneIndex; zone >= 0; zone--) {shiftOut(dataPin1, clockPin1, MSBFIRST, bitmap[row][zone]);}//-- Done sending Column bytes, flip both latches at once to eliminate flickerdigitalWrite(latchPin1, HIGH);digitalWrite(latchPin2, HIGH);//-- Wait a little bit to let humans see what we've pushed out onto the matrix --delayMicroseconds(100);//delay(1) ;}}// Converts row and colum to actual bitmap bit and turn it off/onvoid Plot(int col, int row, bool isOn){int zone = col / 8;int colBitIndex = x % 8;byte colBit = 1 << colBitIndex;if (isOn)bitmap[row][zone] = bitmap[y][zone] | colBit;elsebitmap[row][zone] = bitmap[y][zone] & (~colBit);}// Plot each character of the message one column at a time, updated the display, shift bitmap left.void AlphabetSoup(){if (rr<2){// char msg[] = "12345678901011121314151617";for (int charIndex=0; charIndex < (sizeof(msg)-1); charIndex++){int alphabetIndex = msg[charIndex] - ' ';if (alphabetIndex < 0) alphabetIndex=0;//-- Draw one character of the message --for (int col = 0; col < 6; col++){for (int row = 0; row < 8; row++){bool isOn = 0;if (col<5) isOn = bitRead( alphabets[alphabetIndex][col], 7-row ) == 1;Plot( numCols-1, row, isOn);}//-- The more times you repeat this loop, the slower we would scroll --for (int refreshCount=0; refreshCount < 1; refreshCount++) //change this value to vary speed// RefreshDisplay();//-- Shift the bitmap one column to left --for (int row=0; row<8; row++){for (int zone=0; zone < numZones; zone++){bitmap[row][zone] = bitmap[row][zone] >> 1;// Roll over lowest bit from the next zone as highest bit of this zone.if (zone < maxZoneIndex) bitWrite(bitmap[row][zone], 7,bitRead(bitmap[row][zone+1],0));}}}}}rr++; }//=== L O O P ===void loop() {// if (rr<2){AlphabetSoup();// }//rr++;for (int r = 0; r<10; r++){RefreshDisplay();//delay(100);}} Endret 15. mai 2015 av iam99pk Lenke til kommentar
Professor Balthazar Skrevet 16. mai 2015 Del Skrevet 16. mai 2015 Hei. Linken din fungerte ikke, men jeg fant det til slutt http://www.instructables.com/id/Make-a-24X6-LED-matrix/?ALLSTEPS Kan ikke se annet enn at du bare må lodde selve matrisen på nytt. Fin fin læring i det å :-) Lenke til kommentar
iam99pk Skrevet 16. mai 2015 Forfatter Del Skrevet 16. mai 2015 (endret) http://m.instructables.com/id/48x8-SCROLLING-MATRIX-LED-DISPLAY-USING-ARDUINO-CO/?ALLSTEPSder har du linken jeg fulgte...Går det ikke ann å bare bruke transistor på de 48 colum istedenfor på row? Og forandre litt p kodene? er jo mest 1 600 lodde punkter i den matrixen så hadde håpet jeg hadde sluppet det Endret 16. mai 2015 av iam99pk Lenke til kommentar
iam99pk Skrevet 16. mai 2015 Forfatter Del Skrevet 16. mai 2015 går det ikke ann å kode det slik at det blir 48 row og 16 colum men går likt som hvis det hadde vært 16 row og 48 colum? Lenke til kommentar
Hårek Skrevet 16. mai 2015 Del Skrevet 16. mai 2015 ...eller går det ann å få 74HC595 IC til å gi ut GND isteden for 5+V? Nei, det går selvsagt ikke. Men du kan vel sette inn en inverter? Tipper 74HC240 kan brukes. Lenke til kommentar
iam99pk Skrevet 16. mai 2015 Forfatter Del Skrevet 16. mai 2015 ...eller går det ann å få 74HC595 IC til å gi ut GND isteden for 5+V? Nei, det går selvsagt ikke. Men du kan vel sette inn en inverter? Tipper 74HC240 kan brukes. okay så den setter jeg inn mellom ic og motstanden eller etter motstanden? (har det noe å si egentlig?) og brukder jeg det på row og colum da? Lenke til kommentar
Hårek Skrevet 16. mai 2015 Del Skrevet 16. mai 2015 Motstanden skal mellom driver og LED. Ser ut som du mangler helt grunnleggende elektronikk kunnskap. Lenke til kommentar
iam99pk Skrevet 16. mai 2015 Forfatter Del Skrevet 16. mai 2015 ja men tengte på 74HC240 om motstanden ska før eller etter den? har alldri brukt en slik en? regner med at føst skal 74HC595 IC-en så 74HC240 så skal motstanden inn også til ledene? Lenke til kommentar
Jaffe Skrevet 17. mai 2015 Del Skrevet 17. mai 2015 ...eller går det ann å få 74HC595 IC til å gi ut GND isteden for 5+V? Nei, det går selvsagt ikke. Men du kan vel sette inn en inverter? Tipper 74HC240 kan brukes. Kanskje jeg misforstår, men hvorfor skulle ikke det gå? Lenke til kommentar
Hårek Skrevet 17. mai 2015 Del Skrevet 17. mai 2015 Det kan være formuleringen som er uklar. "få en IC til å gi ut GND isteden for 5+V" låter nokså meningsløst i mine ører. Utgangen er en transistor som enten leder til GND (logisk lav), eller til +5V (logisk høy).* Det går ikke an å gjøre om dette på en IC. Men en ekstra IC gjør jobben. *(ser bort fra tri-state her). Lenke til kommentar
Jaffe Skrevet 17. mai 2015 Del Skrevet 17. mai 2015 Enig i at "gi ut GND" ikke gir mye mening, men er det egentlig noen forskjell fra å sette en utgang på 74'595 logisk lav ("gi ut GND") og å sette den logisk høy etterfulgt av en 74'240? Lenke til kommentar
Hårek Skrevet 17. mai 2015 Del Skrevet 17. mai 2015 Nei, det blir jo det samme. Har ikke satt meg inn i prosjektet her, men det er kanskje ikke så enkelt å modifisere slik at data kommer ut invertert? Å sette inn en hardware inverter er derimot enkelt når man har et breadboard. Lenke til kommentar
Jaffe Skrevet 17. mai 2015 Del Skrevet 17. mai 2015 Det bør vel kunne ordnes enkelt i koden ved å invertere før bitene sendes til skiftregisteret, men det kommer jo an på hvor drevet TS er i C. For å bruke den eksisterende koden slik den er så er vel det enkleste å slenge på en inverter som du sier. Lenke til kommentar
iam99pk Skrevet 17. mai 2015 Forfatter Del Skrevet 17. mai 2015 Det kan være formuleringen som er uklar. "få en IC til å gi ut GND isteden for 5+V" låter nokså meningsløst i mine ører. Utgangen er en transistor som enten leder til GND (logisk lav), eller til +5V (logisk høy).* Det går ikke an å gjøre om dette på en IC. Men en ekstra IC gjør jobben. *(ser bort fra tri-state her). ja ser nå at det ser rart ut xD har besstilt den IC-en så skal prøve når jeg får den! satser på at det funker da Det bør vel kunne ordnes enkelt i koden ved å invertere før bitene sendes til skiftregisteret, men det kommer jo an på hvor drevet TS er i C. For å bruke den eksisterende koden slik den er så er vel det enkleste å slenge på en inverter som du sier. hadde vert greit å lært hvordan du gjør det.. for jeg har prøvd litt men får det ikke til men jeg kan ikke kode noe godt i det heile tatt da.. Lenke til kommentar
Jaffe Skrevet 17. mai 2015 Del Skrevet 17. mai 2015 Jeg har ikke satt meg inn i prosjektet ditt, men for å få 0V ut fra 74HC595 i stedet 5V så kan du rett og slett invertere (snu om) på bitene du sender ved å bruke NOT-operatoren i C, ~. I funksjonen RefreshDisplay() må du da endre til følgende hvis du skal invertere rad-bitene: shiftOut(dataPin2, clockPin2, MSBFIRST, ~rowbit); //Transmit data eller følgende hvis du skal invertere kolonne-bitene: shiftOut(dataPin1, clockPin1, MSBFIRST, ~bitmap[row][zone]); (Merk ~ foran verdien som skal sendes. Denne operatoren snur om på alle bitene; 0 blir 1 og 1 blir 0.) Jeg vil også bare legge til at programmet spiser veldig mye RAM slik det er nå. Jeg vet ikke hvilke planer du har for prosjektet, men hvis du skal legge til noe annen funksjonalitet så bør du flytte alfabetet til programminnet i stedet for RAM. Lenke til kommentar
iam99pk Skrevet 18. mai 2015 Forfatter Del Skrevet 18. mai 2015 Jeg har ikke satt meg inn i prosjektet ditt, men for å få 0V ut fra 74HC595 i stedet 5V så kan du rett og slett invertere (snu om) på bitene du sender ved å bruke NOT-operatoren i C, ~. I funksjonen RefreshDisplay() må du da endre til følgende hvis du skal invertere rad-bitene: shiftOut(dataPin2, clockPin2, MSBFIRST, ~rowbit); //Transmit data eller følgende hvis du skal invertere kolonne-bitene: shiftOut(dataPin1, clockPin1, MSBFIRST, ~bitmap[row][zone]); (Merk ~ foran verdien som skal sendes. Denne operatoren snur om på alle bitene; 0 blir 1 og 1 blir 0.) Jeg vil også bare legge til at programmet spiser veldig mye RAM slik det er nå. Jeg vet ikke hvilke planer du har for prosjektet, men hvis du skal legge til noe annen funksjonalitet så bør du flytte alfabetet til programminnet i stedet for RAM. okay er det ikke "vanskeligere" enn det? som sagt så har jeg bare funnet kodene på nettet så har ikke gjort noe med dem.. hvis jeg får dette til så er jeg veldig gira på å lære koding selv men regner med disse kodene er litt for store å begynne på så må vel finne noe annet jeg kan begynne å leke litt med Lenke til kommentar
Jaffe Skrevet 18. mai 2015 Del Skrevet 18. mai 2015 Jeg har ikke satt meg inn i prosjektet ditt, men for å få 0V ut fra 74HC595 i stedet 5V så kan du rett og slett invertere (snu om) på bitene du sender ved å bruke NOT-operatoren i C, ~. I funksjonen RefreshDisplay() må du da endre til følgende hvis du skal invertere rad-bitene: shiftOut(dataPin2, clockPin2, MSBFIRST, ~rowbit); //Transmit data eller følgende hvis du skal invertere kolonne-bitene: shiftOut(dataPin1, clockPin1, MSBFIRST, ~bitmap[row][zone]); (Merk ~ foran verdien som skal sendes. Denne operatoren snur om på alle bitene; 0 blir 1 og 1 blir 0.) Jeg vil også bare legge til at programmet spiser veldig mye RAM slik det er nå. Jeg vet ikke hvilke planer du har for prosjektet, men hvis du skal legge til noe annen funksjonalitet så bør du flytte alfabetet til programminnet i stedet for RAM. okay er det ikke "vanskeligere" enn det? som sagt så har jeg bare funnet kodene på nettet så har ikke gjort noe med dem.. hvis jeg får dette til så er jeg veldig gira på å lære koding selv men regner med disse kodene er litt for store å begynne på så må vel finne noe annet jeg kan begynne å leke litt med Det skal ikke være noe vanskeligere enn det nei. Programmet vil fungere akkurat som før, med den eneste forskjellen at når dataene sendes til skiftregisterene (74HC595) så blir de snudd fra 0 til 1 og 1 til 0. Lenke til kommentar
iam99pk Skrevet 18. mai 2015 Forfatter Del Skrevet 18. mai 2015 rått! skal prøve det en dag når jeg er hjemme igjen tru koding er mye lettere enn det jeg har trodd da men må jo bare øve meg på noen små projekter Lenke til kommentar
Dr_VingTor Skrevet 18. mai 2015 Del Skrevet 18. mai 2015 Om jeg forstod deg korrekt, så lyser LEDene når du koble til strømmen, men slukker når du kobler til arduinoen?Eller lyser det med Arduinoen og strøm tilkoblet, men stopper når du kobler arduinoen til PCen? Om det er det siste, kan det være at Arduinoen går inn i bootloaderen, eller et problem med 5V til arduinoen slik at den går i reset?Du bør prøve å skrive et enkelt test program for matrisen din som toggler et og et LED av og på. Slik kan du teste alle koblingene og se etter kortslutninger og finne ut om det er feil i koblingene. Siden LEDene lyser i utgangspunktet høres det ikke ut som om det er noen store problemer med koblingene (vell, kanskje noen små feil her og der), men det kan være vanskelig å finne feil med avanserte programmer. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå