Matchur för fotboll
Re: Matchur för fotboll
Det normala är att när skiftregistren är kaskadkopplade så fungerar de som ett enda stort skiftregister. Varje inklockning flyttar alla bitar ett steg. En ny bit klockas alltså in och alla andra flyttas ett steg. Du börjar alltså med de data som ska till skiftregistret "längst bort", sen de som ska till den "näst längst bort" osv.
- FormerMazda
- Inlägg: 6442
- Blev medlem: 27 februari 2006, 14:59:36
- Ort: Asby (Östergötland)
Re: Matchur för fotboll
Så om jag under en latch skickar 32 bits så har jag gjort det jag ska man säga?
Vill jag att min vänstraste siffra (shiftreg. nr 1 i slingan) ska visa en åtta och de andra inget så skiftar jag in 3x8 nollor följt av 1x8 ettor. Typ. ?
Vill jag att min vänstraste siffra (shiftreg. nr 1 i slingan) ska visa en åtta och de andra inget så skiftar jag in 3x8 nollor följt av 1x8 ettor. Typ. ?
Re: Matchur för fotboll
Jag har inte kollat ditt schema men det låter som du tänker rätt. Varje gång du ska ändra en siffra måste du alltså skifta igenom alla bitar. Det enklaste är ju då att låta mjukvaran först skriva mot en variabel som sen klockas ut. Då kan du ändra EN siffra i den variabeln och sen klocka ut alla.
- FormerMazda
- Inlägg: 6442
- Blev medlem: 27 februari 2006, 14:59:36
- Ort: Asby (Östergötland)
Re: Matchur för fotboll
Schemat är enkelt, i princip en 74hc595 och en uln2003 till varje siffra. Så Q0 = segment A, Q1 = segment B, osv.
Så den använder inte alla 8 ut på shiftregistret, men för en 8:a så kan jag ju dra alla.
Japp, tanken är att skriva en funktion dit man skickar en sträng på 4 tecken som då bryts ner, kodas av och skickas ut.
Så den använder inte alla 8 ut på shiftregistret, men för en 8:a så kan jag ju dra alla.
Japp, tanken är att skriva en funktion dit man skickar en sträng på 4 tecken som då bryts ner, kodas av och skickas ut.
Re: Matchur för fotboll
Du behöver ha kopplat vidare en "utgång" från första skiftregistret till ingången på nästa (annars kommer du klocka in samma data i alla skiftregister och det är ju inte det du tänkt).
Pin 9 på en till pin 14 på nästa tror jag det är (bara snabbkollat databladet).
Vet inte om den här länkats tidigare i tråden: http://arduino.cc/en/tutorial/ShiftOut
Den här tekniken med skiftregister är ungefär samma som används av SPI.
Pin 9 på en till pin 14 på nästa tror jag det är (bara snabbkollat databladet).
Vet inte om den här länkats tidigare i tråden: http://arduino.cc/en/tutorial/ShiftOut
Den här tekniken med skiftregister är ungefär samma som används av SPI.
Senast redigerad av Nerre 19 februari 2015, 12:43:09, redigerad totalt 2 gånger.
Re: Matchur för fotboll
Själv har jag gjort tabeller.
En tabell håller "mönstret" för varje siffra, sedan är det bara en fråga om att slå upp i tabellen i tur och ordning.
Att dela upp ett värde är sedan enkelt, tar man t.ex. minuter:
unsigned char Min10 = Minutes / 10; // Plockar ut 10-minuterna
unsigned char Min01 = Minutes % 10; // Plockar ut 1-minuterna
En tabell håller "mönstret" för varje siffra, sedan är det bara en fråga om att slå upp i tabellen i tur och ordning.
Att dela upp ett värde är sedan enkelt, tar man t.ex. minuter:
unsigned char Min10 = Minutes / 10; // Plockar ut 10-minuterna
unsigned char Min01 = Minutes % 10; // Plockar ut 1-minuterna
- FormerMazda
- Inlägg: 6442
- Blev medlem: 27 februari 2006, 14:59:36
- Ort: Asby (Östergötland)
Re: Matchur för fotboll
Då har jag knackat ihop en liten mappning för de tecken jag kan komma på och vad dess värden blir decimalt.
Och en kort snurra som stoppar ut dom ett tecken i taget med högraste först.
Knappt man kan tro det, men det fungerar!
Nej, jag söker inga komplimanger för koden, det kan inte ens en mammas kärlek ge.
Och en kort snurra som stoppar ut dom ett tecken i taget med högraste först.
Knappt man kan tro det, men det fungerar!

Nej, jag söker inga komplimanger för koden, det kan inte ens en mammas kärlek ge.
Kod: Markera allt
int latchPin = 8;
int clockPin = 12;
int dataPin = 11;
char OneChar;
String sToDisp;
void setup() {
Serial.begin(9600);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
sToDisp = "ASby";
DispOut(sToDisp);
delay(500);
sToDisp = " 1F ";
DispOut(sToDisp);
delay(500);
}
void DispOut(String cData) {
byte bDig = 0;
digitalWrite(latchPin, LOW);
for (int i=3; i >= 0; i--){
OneChar = cData.charAt(i);
bDig = CharMap(OneChar);
Serial.println(bDig);
shiftOut(dataPin, clockPin, MSBFIRST, bDig);
}
digitalWrite(latchPin, HIGH);
}
byte CharMap(char sData) {
digitalWrite(13, HIGH);
byte rData = 0;
if (sData == '0') rData = 126;
if (sData == '1') rData = 12;
if (sData == '2') rData = 182;
if (sData == '3') rData = 158;
if (sData == '4') rData = 204;
if (sData == '5') rData = 218;
if (sData == '6') rData = 250;
if (sData == '7') rData = 14;
if (sData == '8') rData = 254;
if (sData == '9') rData = 222;
if (sData == 'A') rData = 238;
if (sData == 'b') rData = 248;
if (sData == 'c') rData = 176;
if (sData == 'E') rData = 242;
if (sData == 'F') rData = 226;
if (sData == 'g') rData = 222;
if (sData == 'h') rData = 232;
if (sData == 'L') rData = 112;
if (sData == 'n') rData = 168;
if (sData == 'o') rData = 184;
if (sData == 'P') rData = 230;
if (sData == 'r') rData = 160;
if (sData == 'S') rData = 218;
if (sData == 'U') rData = 124;
if (sData == 'y') rData = 220;
return rData;
digitalWrite(latchPin, HIGH);
}
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
- FormerMazda
- Inlägg: 6442
- Blev medlem: 27 februari 2006, 14:59:36
- Ort: Asby (Östergötland)
Re: Matchur för fotboll
Tackar! Ja det går ju framåt! Och kul är det!
Minnesantecknar till mig själv:
Använd en "RunMode" variabel för att veta vad som pågår. (uppstart, paus, match, mm)
Använd BCD-0-9-knapparna för poängställningen.
Ibland kommer man på saker på tänkartronen här på jobbet, då är det bra att skriva ner dom.

Minnesantecknar till mig själv:
Använd en "RunMode" variabel för att veta vad som pågår. (uppstart, paus, match, mm)
Använd BCD-0-9-knapparna för poängställningen.
Ibland kommer man på saker på tänkartronen här på jobbet, då är det bra att skriva ner dom.
Re: Matchur för fotboll
Istället för en radda med if-satser så kan du ha en färdig array med "segmentdata" för varje asciitecken. (De första 33 kommer ju vara 0 om du inte ska ha nåt special där). Lägg till tecken för att göra "roliga animationer" typ streck som snurrar runt i displayen eller liknande, kan kanske vara bra-att-ha [tm].
- FormerMazda
- Inlägg: 6442
- Blev medlem: 27 februari 2006, 14:59:36
- Ort: Asby (Östergötland)
Re: Matchur för fotboll
Håller med om att if-lösningen inte är snygg.
En array började jag med, men den får ju bli minst 127 platser lång för 25 tecken. Så det kändes hugget som stucket vid tillfället när jag skrev det.
En array började jag med, men den får ju bli minst 127 platser lång för 25 tecken. Så det kändes hugget som stucket vid tillfället när jag skrev det.
Re: Matchur för fotboll
Nu spekulerar jag bara, men går det inte långsammare för programmet att utföra alla jämförelsevillkor i CharMap-funktionen, än att den vet direkt genom en array vilken minnesplats den ska hämta datat ifrån?
Dock kanske den eventuella tidsskillnaden inte spelar någon roll i det här fallet
Dock kanske den eventuella tidsskillnaden inte spelar någon roll i det här fallet

- FormerMazda
- Inlägg: 6442
- Blev medlem: 27 februari 2006, 14:59:36
- Ort: Asby (Östergötland)
Re: Matchur för fotboll
Jag kan tänka att det borde ta längre tid. Men där kommer jag bara passa data som tätast 1ggn i sekunden och tiden som matchuret baseras på blir millis () vilket inte ska påverkas av långsamma funktioner.
Men visst, i excel har man ju snart byggt en array, kanske skulle skriva om bara för sakens skull. ☺
Men visst, i excel har man ju snart byggt en array, kanske skulle skriva om bara för sakens skull. ☺
Re: Matchur för fotboll
Du kan ju ha en array för ascii-kod 48-95 (0-9, A-Z och ett par tecken) eller för 33-95 ("alla" vanligt förekommande specialtecken, 0-9, A-Z), något enstaka undantag med if-satser för de få bokstäver som går att skriva både som liten och stor (i / I o.s.v.) och i övrigt bara en if-sats för att se om tecknet ryms inom arrayens område och sen dra ifrån 48 eller 33 från asciivärdet för att peka på rätt ställe i arrayen.
Detta förutsatt att du ska skicka in tecken från utsidan via nåt standardinterface (serieport eller liknande) och/eller vill blanda text som också visas på någon färdig LCD-display eller liknande. Om all text endast ska finnas internt i kretsen så kan du ju göra en egen teckentabell som bara rymmer de tecken du vill kunna skriva, och göra om textsträngar till denna teckenkoduppsättning innan de skickas in i mikrokontrollern.
Detta förutsatt att du ska skicka in tecken från utsidan via nåt standardinterface (serieport eller liknande) och/eller vill blanda text som också visas på någon färdig LCD-display eller liknande. Om all text endast ska finnas internt i kretsen så kan du ju göra en egen teckentabell som bara rymmer de tecken du vill kunna skriva, och göra om textsträngar till denna teckenkoduppsättning innan de skickas in i mikrokontrollern.
Re: Matchur för fotboll
Om det nu är en "klocka" så lär väl displayen normalt bara vara tänkt att visa siffrorna 0-9? Då är ju en enkel array på 10 element vettigast.
Ska den visa andra tecken så antar jag att det bara är ett fåtal tecken som är aktuella och de kanske man kan "fuska fram" genom att lägga dem på index 10 och uppåt i tabellen. Det går då visserligen inte att skicka ut rena strängar, men det lär ju inte vara aktuellt heller utan de "fyra tecken" strängarna får man helt enkelt lagra som tabellvärdena istället för ascii. Men å andra sidan, eftersom man ändå troligen jobbar med bytes så är det väl lika bra att lägga segmentbitarna i de fyra bytesen?
Ska den visa andra tecken så antar jag att det bara är ett fåtal tecken som är aktuella och de kanske man kan "fuska fram" genom att lägga dem på index 10 och uppåt i tabellen. Det går då visserligen inte att skicka ut rena strängar, men det lär ju inte vara aktuellt heller utan de "fyra tecken" strängarna får man helt enkelt lagra som tabellvärdena istället för ascii. Men å andra sidan, eftersom man ändå troligen jobbar med bytes så är det väl lika bra att lägga segmentbitarna i de fyra bytesen?