Sida 4 av 9

Postat: 18 juli 2007, 20:50:09
av sodjan
OK, jag ska ta lite mer tid (om inte någon annan hinner före :-) ).
Just nu är det Miss Marple och i morgon har jag en "mini-semester"
(något medeltidsjippo i Vadstena). Men men... :-)

Banksel, *inte* blanksel (får du inget fel ???).

Du måste räkna lite på det, prescaler, tmr0 o.s.v tillsammans...

Du behöver absolut inte kopiera hela kapirel från databladet, jag har det också.
Ange bara sida, kapitel och citera eventuell mening som är oklar...

Postat: 18 juli 2007, 21:05:22
av basmicke
Jag komplimerar inte min kod är inte hemma så jag komplimerar inte på deras dator ska mer tänka på å göra det när jag kommer hem. Men sen så tänkte jag inte komplimera för ens programmet är färdigt.
Jag vet att det finns simulatorer och har en hemma, kommer inte ihår vad den heter men den finns på microchips hemsida.
Ok. det är bara 1 stort problem, hur jag ska räkna men jag ska kolla databladet å se om jag kan hitta något.
JO det kappitlet om Oscillator konfigerna fattade jag inte mycket av. jag förstår det att om man har en keramisk "RESONATORS " är det en hastighet och om man har en "CRYSTAL OSCILLATOR" är det en annan. Eller?
Och sen kunde man välja hastiget genom det här HS och alla dem "funktionerna". Sen så är det nog lite oklart än har inte orkat å läst igenom all, men ska nog göra det.
Det känns mycket positivare för mig nu när du ill hjälpa mig lite mer. Jag tycker personligen att det är enklare att få det förklarat för sig på svenska och med egna ord än å försöka förstå allt i databladet. Men jag ska skärpa mig lite och läsa mer om timer modulerna och lite annat som man kanske behöver.

Postat: 18 juli 2007, 21:06:07
av basmicke
men du får ha det så trevligt på "mini-semestern".. så hörs vi senare..

Postat: 18 juli 2007, 21:22:17
av basmicke
Jo om du hinner kolla det här innan du åker på semester, så kanske du skullekunna svara på en fråga som jag inte blir klok på.
Vad är en prescaler?
Kan inte lista ut vad det är, har kollat databladet men blir inget klokare på det :?

Postat: 18 juli 2007, 21:26:40
av bengt-re
Prescaler är en delare (scaler) Pre att den ligger "före" i kedjan (uttrycket postscaler finns också). På picar så kan man antigen använde den till att förlänga WDT-perioden eller dela ner räknarna så att de får längre räknarområde. Står bra i databladet, men obervera att 16-serien är lite rolig då man bara har en och man väljer mellan att ha den till WDT eller till TIMER

Postat: 18 juli 2007, 21:33:07
av basmicke
Hittade den här länken när jag sökte på "prescaler".
http://www.md.kth.se/met/pdf/Mik/Timer.pdf
förklarade rätt så bra vad det betydde, och lite andra trevliga funktioner.

Postat: 18 juli 2007, 21:39:33
av bengt-re
Men varför läsa en massa obskyra länkar - svaren står i databladet..... Ett tips bara - följ råden för hur att assigna prescalern till TIMER för slippa risk för det händer skumma saker (om man kör med WDT).

Note: To avoid an unintended device RESET, the instruction sequence shown in the PICmicroTM Mid-Range MCU
Family Reference Manual (DS33023) must be executed when changing the prescaler assignment from
Timer0 to the WDT. This sequence must be followed even if the WDT is disabled.

Postat: 18 juli 2007, 21:42:53
av basmicke
Ja vet. Men det står väll i databladet.

Kod: Markera allt

CLRWDT
BSF STATUS, RP0
MOVLW b'xxxx0xxx'
MOVWF OPTION_REG
BCF STATUS, RP0

Postat: 18 juli 2007, 21:51:01
av bengt-re
Yepp ;)

talar bara av erfarenhet - missade det en gång och fick ett skumt sytem....


En rolig sak med prescalern är att man kan räkna riktigt snabbt även vid lite lägre klockfrekvenser. Med bra insignaler kan man räkna upp till 50MHz och det kan ju vara lite coolt ibland ;) Bygga en 50MHz frekvensräknare med en 16Fxxx och en LCD, en pot och en konding är rätt coolt onekligen. Erkänner direkt att det finns bättre räknare och skall man bygga en snabb räknare är det ofta bättre med en separat snabb logikkrets som prescaler, men då är det ju också en till krets att cadda in och som drar ström och har sig...

Postat: 18 juli 2007, 21:57:17
av basmicke
ok...
enligt databladet har man ju 3 timer tmr0,tmr1 och tmr2 men jag har ju använta alla 3, 2 till pwm modulen och en som ska räkna 100us och skapa en interupt signal, men jag ska ju har en som räknar ner till 0 på varje led och vid noll släcker den.
Och så tror jag att sodjan skrv något mer om en som skuller räkna ner huvud utgångarna eller ingångarna eller vad han skrev, ska kolla upp det.

Så hur ska jag kunna göra det?

Postat: 18 juli 2007, 21:59:07
av basmicke
Sedan vill du ha t.ex 100 olika nivår, så då får vi en bas-räknare på
100 us.

Så var 100'de us så gör du följande :

1. Räka ner var och en av LED-räknarna, om någon blir "noll", släck
motsvarande LED.

2. Räkna ner huvud-räknaren, om den blir noll så återståll den till
100, ladda om alla LED-räknarna med resp "nivå" och tänd alla LED.

Enklast sätts en timer upp att genera ett interrupt var 100 us (ca,
det är inte speciellt kritiskt, så klart). Sedan går allt av sig själv,
så att säga...

Jag vet inte vilken hastighet du kör med, men vid 20 Mhz så är
100 us ca 500 instruktioner, vilket är *massor* av tid.
Ovanstående tar ca 40-50 instruktioner att göra...
Så skrev han att jag skulle göra men hur?

Postat: 18 juli 2007, 22:42:17
av Kaggen
basmicke: Följde det inte med demo-kod med din velleman-programmerare? Tror det fanns ett demo där som blinkar en diod (iaf med min gammla velleman), varför använder du inte det demot och modifierar det så du dimmar dioden? Demot använder iofs inte hårdvaru timers, men jag tror att du lär dig mer om hur assembler-instruktionerna funkar om du börjar med det.

Du bör lära dig mer om bitar och bytes och filregister m.m. innan du ger dig på det du försöker nu.

. bitar och bytes finns en länk om här http://w3.msi.vxu.se/multimedia/km/dato ... Bytes.html eller här http://www.kjell.com/kjellfakta/bit_o_byte/

Att blinka en diod är ju grunden till att "dimma" eller PWM om man vill. Du blinkar den helt enkelt snabbare så ögat inte uppfattar att den blinkar (c.a. 50 - 100 ggr i sekunden) och varierar själva tiden den lyser proportionellt mot tiden den inte lyser. ju längre den lyser vid varje blink ju starkare uppfattar ögat att den lyser, och motsvarande ju kortare den lyser vid varje blink, ju svagare tycks den lysa.

När du fixat det på en diod kan du kanske börja fundera på timers och liknande.

Du måste bli så pass duktig på hur assembler fungerar så du kan översätta sodjans instruktioner ovan till ett assembler-program själv.


/Mats

Postat: 18 juli 2007, 22:54:39
av sodjan
Nej nej nej...

För det som *jag* beskrev så behövs det *EN* *TIMER*.
Som jag *OCKSÅ* skrev så ska du *INTE* kalla de inbyggda timers
för "räknare", gör du det så rör du till det som du har gjort nu...

(Även om "counter" är ett sätt som dessa timers kan användas på, men
det är något helt annat än det vi talar om här...)

PWM styrningen köts av *EN* timer som ger grundklockan
(till exempel 100 us, men det beror ju bl.a på hur många olika
nivåer du vill ha i styrningen, och det är inte speciellt kritiskt heller,
välj ett värde som dels fungerar, dels är enkelt att konfigurera).

Sedan har du några *RÄKNARE*, en för varje led och en gemensam.
Dessa räknare är inget annat än vanliga variabler (register, bytes eller
vad du vill kalla dom).

Postat: 18 juli 2007, 23:05:55
av vfr
Jag tycker nog att Kaggen har en bra synpunkt. Sodjan och alla andra här är väldigt hjälpsamma, men när nästan varje svar ger tre nya följdfrågor istället för att komma vidare så känns det som att du försöker ta ett alldeles för stort steg. Gör som Kaggen säger och ge dig på något enklare tills du iallafall börjar lära dig hur grundfunktionerna fungerar.

Ge inte upp utan ta nya tag och ta en bit i taget så ska du se att det går mycket lättare! :wink:

Postat: 18 juli 2007, 23:06:43
av basmicke
Ok jag började fundera..
Så om jag skulle välja värdet 100 på alla är det fel då?
Ok men en "räkanre" är alltså en variabel?
hur ska man skriva då för att få en "räknare"?
Hänger inte riktigt med på erat resonemang, så skulle villja ha ett exempel så man kan kolla lite på det om det är någon som har ork och tid att göra ett?