Delay vs timer
Re: Delay vs timer
Här kan man se hur det ser ut när man tar med tiondelen.
http://swalden.se/display2010.MP4
Den här filmen är 1 år gammal.
En del ändringar i koden har sket sen dess, så som i filmen att vid om slag från 9 sek till 10 vissa 19 innan om slag från 9 till 0 sker.
http://swalden.se/display2010.MP4
Den här filmen är 1 år gammal.
En del ändringar i koden har sket sen dess, så som i filmen att vid om slag från 9 sek till 10 vissa 19 innan om slag från 9 till 0 sker.
Re: Delay vs timer
Bild på hur den elektromekaniska displayen är kopplad.
Länk till schema http://swalden.se/electro.pdf

Länk till schema http://swalden.se/electro.pdf

Re: Delay vs timer
OK, du du kör alla segment i en siffra samtidig.
Det är 6 siffror, alltså gör du 2 st buffer på 6 platser (bytes). Den ena kallas To_Be[6] och den andra Status[6];
Allt som ska visas på displayen ska skrivas till To_Be[].
I timer-ISR utförs sedan:
Svårare är det inte...
Det är 6 siffror, alltså gör du 2 st buffer på 6 platser (bytes). Den ena kallas To_Be[6] och den andra Status[6];
Allt som ska visas på displayen ska skrivas till To_Be[].
I timer-ISR utförs sedan:
Kod: Markera allt
)
for(X = 0; X < sizeof(To_Be); X++)
{
if(Status[X] != To_Be[X])
{
Status[X] = To_Be[X];
PORTB = Status[X];
// Skaka kretsarnas kontrollpinnar så att segmenten ställs rätt
goto DoneForNow;
}
DoneForNow:;
}
Re: Delay vs timer
Du förkastar alltså Isecaps förslag till lösning och försöker således uppfinna ett nytt hjul baserat på det faktum att Isecaps förslag är för komplicerat. Är det rätt tolkat?Har ännu inte gjort någon kod för att "bara" ändra de segment som inte är satta eller skall släckas.
Men har tittat lite på det, men tycker det blev lite komplicerat.
Graden av komplexitet för olika lösningar kan ligga i vilket språk man väljer att göra implementationen i. Använder man ett språk från datorernas medeltid kan det bli väldigt komplicerat jämfört med att använda exempelvis C. Assembler är just ett medeltida språk som gör saker mera komplicerat än vad det är.
Numera behövs bara assembler i väldigt tidkritiska applikationer som exempelvis i vissa signalbehandlingapplikationer i DSP:er där man behöver stenkoll på tiden det tar att exekvera en viss kodsekvens. I vissa enstaka fall kan man även behöva ta till assembler på grund av att kompilatorn inte klarar att han hantera en viss maskinkod av någon anledning. Detta brukar då lösas med så kallad inline assembler om detta finns implementerat i den kompilator man använder.
Såhär spontant känns det inte som att din applikation är tidkritisk mer än möjligtvis vid något enstaka tillfälle eftersom det inte handlar om signalbehandling i realtid med tidperioder under 1 mS.
Re: Delay vs timer
labmaster: "lite komplicerat" kan ju likaväl betyda "över min nivå" och det får man ha respekt för. Av vad jag kan läsa i tråden är programmeringsnivån inte helt på topp. Detta läser jag av att uppdateringen avbryts osv.
Men jag är inte helt imponerat av lusten att ta ett steg uppåt - eller rättare: bristen på lusten att ta ett steg uppåt...
Men jag är inte helt imponerat av lusten att ta ett steg uppåt - eller rättare: bristen på lusten att ta ett steg uppåt...
Re: Delay vs timer
Det håller jag med om Isecap men ville inte skriva det rakt ut. Jag antar att både du och jag med flera ser sådant i flera trådar här på forumet. När en del lösningsförslag övergår kompetensen hos den som försöker lösa ett problem förkastas ofta bra lösningar med motivet att de är för komplicerade.
Re: Delay vs timer
Här har du helt fel.labmaster skrev:Du förkastar alltså Isecaps förslag till lösning och försöker således uppfinna ett nytt hjul baserat på det faktum att Isecaps förslag är för komplicerat. Är det rätt tolkat?Har ännu inte gjort någon kod för att "bara" ändra de segment som inte är satta eller skall släckas.
Men har tittat lite på det, men tycker det blev lite komplicerat.
När Icecap i en tidigare tråd gav mig detta tips började jag titta på den lösningen och kom en bra bit på väg.
Men du jag hade andra problem med koden, blev det att jag koncentrerade mig på att lösa de problemen, än att implementera ytligare en funktion som möjligen kunde börja strula till det.
Kommer absolut att införa den funktionen när allt fungerar som det skall.
Är mycket tacksam för att få tips och hjälp av er, så jag har absolut inte låst in mig på att inte ändra på den kod som är idag för att jag inte har kunskapen.
Är fortfarande en nybörjare och behöver er hjälp som kan göra att jag lär mig mer om programmering.
Tack

Re: Delay vs timer
Ok Stewal. det är inte fult att sakna kunskap. Däremot är det aldrig framgångsrikt att dölja sin okunskap inom olika området ty då får man som regel inte rätt hjälp.
Som "nybörjare" är det bättre att lära sig programera i ett högnivåspråk än att starta med assembler. För 30 år sedan då persondatorer och mikokontrollers började dyka upp till rimliga priser fanns inte så många alternativ utöver assembler eftersom kompilatorer var både dyra och svåråtkomliga.
I dagens läge finns inte dessa problem enär man får tag på C och C++ kompilatorer till inga pengar alls. Att ha kunskap inom assemblerprogramring är dock en merit men det räcker i stort sett med att lära sig att tända och släcka dioder på en labbplatta. Större projekt likt ditt löses bäst med C som programmeringsspråk. Det är bland annat därför som Isecap har gett dig en lösning i just C i din tråd.
En sak som kan vara bra att tänka på är att försöka hålla Interupt Service rutinerna så korta som möjligt i den mån det går.
Lycka till med ditt projekt!
Som "nybörjare" är det bättre att lära sig programera i ett högnivåspråk än att starta med assembler. För 30 år sedan då persondatorer och mikokontrollers började dyka upp till rimliga priser fanns inte så många alternativ utöver assembler eftersom kompilatorer var både dyra och svåråtkomliga.
I dagens läge finns inte dessa problem enär man får tag på C och C++ kompilatorer till inga pengar alls. Att ha kunskap inom assemblerprogramring är dock en merit men det räcker i stort sett med att lära sig att tända och släcka dioder på en labbplatta. Större projekt likt ditt löses bäst med C som programmeringsspråk. Det är bland annat därför som Isecap har gett dig en lösning i just C i din tråd.
En sak som kan vara bra att tänka på är att försöka hålla Interupt Service rutinerna så korta som möjligt i den mån det går.
Lycka till med ditt projekt!
Re: Delay vs timer
Icecap:
> OK, du du kör alla segment i en siffra samtidig.
Ja just nu gör jag det men är inne på att ändra det sen till att bara sätta de segment som inte är tända och släcka de som inte skall vara satta.
> Det är 6 siffror, alltså gör du 2 st. buffer på 6 platser (bytes). Den ena kallas To_Be[6] och den andra Status[6];
Tack, här är något jag inte tänkt på tidigare.
Idag har jag 6 st. "RES" för varje siffra (Digit) som inkommande nummer sparas i och 6 st. "RES" för vad som spardes tidigare.
Mycket enklare med 2 st. buffrar.
> Allt som ska visas på displayen ska skrivas till To_Be[].
Låter logiskt.
> I timer-ISR utförs sedan:
Här kan jag säga att jag inte är med, då jag skriver i ASM och inte kan C.
Du får gärna för klara mer vad som gör vad.
> OK, du du kör alla segment i en siffra samtidig.
Ja just nu gör jag det men är inne på att ändra det sen till att bara sätta de segment som inte är tända och släcka de som inte skall vara satta.
> Det är 6 siffror, alltså gör du 2 st. buffer på 6 platser (bytes). Den ena kallas To_Be[6] och den andra Status[6];
Tack, här är något jag inte tänkt på tidigare.
Idag har jag 6 st. "RES" för varje siffra (Digit) som inkommande nummer sparas i och 6 st. "RES" för vad som spardes tidigare.
Mycket enklare med 2 st. buffrar.

> Allt som ska visas på displayen ska skrivas till To_Be[].
Låter logiskt.
> I timer-ISR utförs sedan:
Här kan jag säga att jag inte är med, då jag skriver i ASM och inte kan C.
Du får gärna för klara mer vad som gör vad.
Kod: Markera allt
)
for(X = 0; X < sizeof(To_Be); X++)
{
if(Status[X] != To_Be[X])
{
Status[X] = To_Be[X];
PORTB = Status[X];
// Skaka kretsarnas kontrollpinnar så att segmenten ställs rätt
goto DoneForNow;
}
DoneForNow:;
}
Re: Delay vs timer
// for(X = 0; X < sizeof(To_Be); X++) är en loop med envariabel som går från x lika med noll till buffertstorleken minus ett.
// X++ betyder att variabeln X ökar med ett varje varv i loopen
// != betyder "inte lika med" eller "skilt ifrån" som man brukar säga
// X++ betyder att variabeln X ökar med ett varje varv i loopen
// != betyder "inte lika med" eller "skilt ifrån" som man brukar säga
Re: Delay vs timer
labmaster:
> Ok Stewal. det är inte fult att sakna kunskap. Däremot är det aldrig framgångsrikt att dölja sin okunskap inom olika området ty då får man som regel inte rätt hjälp.
Helt rätt, kanske inte framgick att jag är nybörjare trots att jag har hållit på nu ett par år, dock i en väldigt lite skala.
> Som "nybörjare" är det bättre att lära sig programmera i ett högnivåspråk än att starta med assembler.
Jag vet men fick tips här på forumet om att lära mig ASM först för det är enklare att förstå hur det fungerar.
Visst är det svårare, men mer utmanande.
> Större projekt likt ditt löses bäst med C som programmeringsspråk.
Kanske är dags nu att ge sig på C som programmeringsspråk.
> Det är bland annat därför som Isecap har gett dig en lösning i just C i din tråd.
Det är väl så.
> En sak som kan vara bra att tänka på är att försöka hålla Interupt Service rutinerna så korta som möjligt i den mån det går.
Får väl se över ISR och lyfta ur kod därifrån.
> Lycka till med ditt projekt!
Tack
> Ok Stewal. det är inte fult att sakna kunskap. Däremot är det aldrig framgångsrikt att dölja sin okunskap inom olika området ty då får man som regel inte rätt hjälp.
Helt rätt, kanske inte framgick att jag är nybörjare trots att jag har hållit på nu ett par år, dock i en väldigt lite skala.
> Som "nybörjare" är det bättre att lära sig programmera i ett högnivåspråk än att starta med assembler.
Jag vet men fick tips här på forumet om att lära mig ASM först för det är enklare att förstå hur det fungerar.
Visst är det svårare, men mer utmanande.
> Större projekt likt ditt löses bäst med C som programmeringsspråk.
Kanske är dags nu att ge sig på C som programmeringsspråk.

> Det är bland annat därför som Isecap har gett dig en lösning i just C i din tråd.
Det är väl så.

> En sak som kan vara bra att tänka på är att försöka hålla Interupt Service rutinerna så korta som möjligt i den mån det går.
Får väl se över ISR och lyfta ur kod därifrån.
> Lycka till med ditt projekt!
Tack
Re: Delay vs timer
>>> Det är bland annat därför som Isecap har gett dig en lösning i just C i din tråd.
> Det är väl så.
Jag *tror* inte att det var så. Jag tror helt enkelt att det var enklare att beskriva
en procedur genom att klä det i "C-kostym". Det betyder inte att man måste
använda C för den egna implementeringen. Men Icecap kanske har "facit".
>>> En sak som kan vara bra att tänka på är att försöka hålla Interupt Service
>>> rutinerna så korta som möjligt i den mån det går.
> Får väl se över ISR och lyfta ur kod därifrån.
Bl.a just det (att inte "överlasta" sin ISR) har så klart inte ett smack med val av
verktyg/språk att göra. Är man i en uppstartsfas med programmering så kommer
man att göra liknande nybörjarfel helt oberoende av verktyg/språk. Sen så finns
det ingen absolut sanning kring detta heller. Det beror mycket på vad applikationen
gör för övrigt utöver ISR'en. Är det ingenting så spelar det ingen större roll...
>>> Som "nybörjare" är det bättre att lära sig programmera i ett högnivåspråk än att starta med assembler.
Det är en åsikt, ingen fakta huggen i sten. Och det är en åsikt som inte delas av alla.
> Det är väl så.
Jag *tror* inte att det var så. Jag tror helt enkelt att det var enklare att beskriva
en procedur genom att klä det i "C-kostym". Det betyder inte att man måste
använda C för den egna implementeringen. Men Icecap kanske har "facit".

>>> En sak som kan vara bra att tänka på är att försöka hålla Interupt Service
>>> rutinerna så korta som möjligt i den mån det går.
> Får väl se över ISR och lyfta ur kod därifrån.
Bl.a just det (att inte "överlasta" sin ISR) har så klart inte ett smack med val av
verktyg/språk att göra. Är man i en uppstartsfas med programmering så kommer
man att göra liknande nybörjarfel helt oberoende av verktyg/språk. Sen så finns
det ingen absolut sanning kring detta heller. Det beror mycket på vad applikationen
gör för övrigt utöver ISR'en. Är det ingenting så spelar det ingen större roll...
>>> Som "nybörjare" är det bättre att lära sig programmera i ett högnivåspråk än att starta med assembler.
Det är en åsikt, ingen fakta huggen i sten. Och det är en åsikt som inte delas av alla.

Re: Delay vs timer
I frågan ASM kontra C vill jag påstå att ASM ger ett bättre kunnande om vilka steg som ska göras för att få funktionerna utförda, något som kan vara av stor hjälp när man lär sig hur µC fungerar.
Men när man har den del avklarat och förstår µC är C definitivt mer produktivt!
Och att man håller alla ISR så korta och kontanta som möjligt är självklart! Ingen väntande eller liknande får ske i en ISR, det finns dock mycket speciella omständigheter som kan medföra ett väntande på något, jag har dock aldrig varit i den sits...
Men när man har den del avklarat och förstår µC är C definitivt mer produktivt!
Och att man håller alla ISR så korta och kontanta som möjligt är självklart! Ingen väntande eller liknande får ske i en ISR, det finns dock mycket speciella omständigheter som kan medföra ett väntande på något, jag har dock aldrig varit i den sits...
Re: Delay vs timer
"Det är en åsikt, ingen fakta huggen i sten. Och det är en åsikt som inte delas av alla."
Då är det ju märkligt att man inte börjar med assembler i de stora kurserna i programutvecklingmetodik på de datatekniska linjerna vid landets högskolor.
Då är det ju märkligt att man inte börjar med assembler i de stora kurserna i programutvecklingmetodik på de datatekniska linjerna vid landets högskolor.
Re: Delay vs timer
Nej, det är inte alls märkligt, tvärt om !
De datatekniska linjerna vid högskolorna pysslar
väldigt sällan med mikrokontrollers.
De datatekniska linjerna vid högskolorna pysslar
väldigt sällan med mikrokontrollers.