Hej Troels
>
>
>> Når programmet så er i
>>programmeringsmode, kan man gemme en værdi, på
>> en bestemt E2PROM adresse, ved at
>>holde en specifik knap nede 2
>> sekunder (PIND.0 - PIND7 matricen).
>>Gemningen skal så markeres ved at
>> blinke med den tilhørende LED (eks.
>>2 gange) (PORTA - Ligeledes 4x4
>> matrice).
>>
>
>Hmm, hvad skal det bruges til ?
Det skal bruges til bl.a. at styre en DC-motor, hvor der læses
pulser fra vha. en opto-switch. Værdierne, der skal kunne
programmeres, er værdier for forskellige positioner, som motoren
skal stoppe ud for. Disse skal, som sagt, kunne ændres af
brugeren, hvis han/hun ændrer på positionerne, fjerner eller
tilføjer nye. Dette gøres ved, at man i programmeringsmode
simpelthen aktiverer motoren ved at holde en knap nede, så kører
motoren den ene vej. Holdes en anden knap nede, kører den den
anden vej. På denne måde aktiveres motoren indtil slæden stopper
ud for den rette position. Herefter holder man den switch nede i
2 sekunder, der skal gælde for den indstillede position, og der
kviteres med 2 blink frå den respektive LED som kvittering for
fastlagt værdi i EEPROM'en. Så længe motoren kører, tælles ticks
fra optoswitchen, så man altid kender den aktuelle position for
slæden. Så er det jo bare at sammenligne værdier
>Ligger hardwaren helt fast ?
Ikke 100% - Da jeg også står for denne
>Umiddelbart lyder det som et trælst MMI (man
>machine interface), hvis jeg må være så fri.
Dog ikke. På det 16-knaps keypad vælges en bestemt hylde.
Motoren kører indtil den aktuelle værdi for hylden nås og
stopper så. Trykker man så på en ny knap, gentages processen.
En LED blinker så længe motoren er aktiv. Slukker denne, er den
ønskede position nået.
Hvorfor er den træls?
Der kommer max 16 positioner, så 1 tast pr. position er da
hurtigt og overskueligt at betjene.
>
>Men jeg vil da gerne hjælpe !
Lyder godt
>
>Har du compiler ?, ICE ?, og har du
>fået hul igennem , eksempelvis bare læse
>værdien af en knap, og skrive den ud på en led ?
Jeps, benytter CodeVision. Ja, der er hul igennem.
>
>Designmæssigt synes jeg du skal lave
>et input-modul, der læser knapperne,
>debouncer dem
debounce - læse og skrive værdien af læsningen på en anden port?
a'la
PINA = PORTB;
, holder rede på hvor
>langt tid de har været holdt nede,
How to?
og til
>sidst sender et event videre i "systemet".
>"Systemet" vil så være din
>hovedapplikation, der selvfølgelig
>skal laves som
>en statemaskine. Key eventet fra
>PINC.3 vil så trække din hovedstate frem og
>tilbage mellem "state running" og
>"state programming". Kun i "state
>programming" laver du transitionerne
>for de 16 key events.
Så stod jeg af. Har ikke prøvet at programmere en state machine
i C. I Verilog på et kursus for mange år siden, men det var jo
også i HW
>Når du så skal blinke med en bestemt
>diode, kan du jo passende sende et
>"flash event" til et led-modul.
Når du skriver modul, mener du så bare via et alm. funktionskald?
Dette
>modul skal så sørge for at tænde og
>slukke dioden hvert 500 ms periodisk i x sekunder.
Er vel bare en interruprutine med en timer?
>
>Alle disse moduler kan laves
>nogenlunde uafhængigt af de andre.
>Hovedstatemaskinen vil kun kommunikere
>med knapper og leds via events.
>Det gør at du kan tage .c filen og
>kompilere et lille gui på pc'en for at
>lege med statemaskinen. (Dette er også
>kanon til at vise
>kunder/chefer/sælgere/testere hvordan
>en kommende funktionalitet kommer til
>at fungere)
Lyder super - Jeg formoder, du så vil kommunikere med
controlleren via dens UART til pc'en, der så modtager pakker og
viser disse i GUI'en? Eller hvordan tænkte du det?
>Desuden vil du kunne bruge knap og led
>modulet i dit næste projekt.
>
>Du _kan_ selvfølgelig også bare lave
>det hele i main() og klare al timing
>med nogle flag hist og pist. Det er
>dog ret svært for os andre at fejlfinde
>i, selvom vi nok vil gøre et ærligt forsøg.
Enig. Det giver vist en ret stor mainfunktion og er ikke just
god C-kode
--
Mvh.
Tomas