Matchur för fotboll

Berätta om dina pågående projekt.
Nerre
Inlägg: 27195
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Matchur för fotboll

Inlägg av Nerre »

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.
Användarvisningsbild
FormerMazda
Inlägg: 6442
Blev medlem: 27 februari 2006, 14:59:36
Ort: Asby (Östergötland)

Re: Matchur för fotboll

Inlägg av FormerMazda »

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. ?
Nerre
Inlägg: 27195
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Matchur för fotboll

Inlägg av Nerre »

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.
Användarvisningsbild
FormerMazda
Inlägg: 6442
Blev medlem: 27 februari 2006, 14:59:36
Ort: Asby (Östergötland)

Re: Matchur för fotboll

Inlägg av FormerMazda »

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.
Nerre
Inlägg: 27195
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Matchur för fotboll

Inlägg av Nerre »

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.
Senast redigerad av Nerre 19 februari 2015, 12:43:09, redigerad totalt 2 gånger.
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Matchur för fotboll

Inlägg av Icecap »

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
Användarvisningsbild
FormerMazda
Inlägg: 6442
Blev medlem: 27 februari 2006, 14:59:36
Ort: Asby (Östergötland)

Re: Matchur för fotboll

Inlägg av FormerMazda »

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.

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.
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Matchur för fotboll

Inlägg av Icecap »

Sedär! Ser ju riktigt bra ut!
Användarvisningsbild
FormerMazda
Inlägg: 6442
Blev medlem: 27 februari 2006, 14:59:36
Ort: Asby (Östergötland)

Re: Matchur för fotboll

Inlägg av FormerMazda »

Tackar! Ja det går ju framåt! Och kul är det! :D

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.
Användarvisningsbild
MiaM
Inlägg: 12850
Blev medlem: 6 maj 2009, 22:19:19

Re: Matchur för fotboll

Inlägg av MiaM »

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].
Användarvisningsbild
FormerMazda
Inlägg: 6442
Blev medlem: 27 februari 2006, 14:59:36
Ort: Asby (Östergötland)

Re: Matchur för fotboll

Inlägg av FormerMazda »

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.
Zkronk
Inlägg: 1439
Blev medlem: 23 augusti 2005, 16:44:36
Ort: Uppsala

Re: Matchur för fotboll

Inlägg av Zkronk »

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 :)
Användarvisningsbild
FormerMazda
Inlägg: 6442
Blev medlem: 27 februari 2006, 14:59:36
Ort: Asby (Östergötland)

Re: Matchur för fotboll

Inlägg av FormerMazda »

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. ☺
Användarvisningsbild
MiaM
Inlägg: 12850
Blev medlem: 6 maj 2009, 22:19:19

Re: Matchur för fotboll

Inlägg av MiaM »

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.
Nerre
Inlägg: 27195
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Matchur för fotboll

Inlägg av Nerre »

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?
Skriv svar