Timer0 och PIC16F877A

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Seven11
Inlägg: 547
Blev medlem: 13 maj 2004, 23:43:33

Inlägg av Seven11 »

nanopile: jag tror inte någon processor har haft en klockcykel på 1 Hz, inte ens under processorernas början var dom så sega... du bör nog läsa på lite om grundläggande mikroprocessorteknik tror jag. Håller med om att assembler inte är svårt men då detta är ett väldigt stor projekt som egentligen behöver vara så snabbt så vill jag köra C.

sodjan: vilka kriterier syftar du på?
sodjan
EF Sponsor
Inlägg: 43266
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> vilka kriterier syftar du på?

Nu är jag inte riktigt med på vad *du* syftar på... :-)

Menar du att jag skrev "men det stämmer inte med de krav du hade från
början".

Det jag tänkte på var att du från början skrev "Jag försöker göra en 1 sekunds timer..."
men den kod du visade *senast* ger (om jag förstår rätt) ca 0.1 sek timer.
Och "varvräknaren" (som skulle vara 76 i förra koden) saknas nu helt.
Så jag tolkade det som att du nu kör med 0.1 sek tid mellan
temperaturavläsningarna (eller vad det nu är du gör).

Om ovanstående stämmer, så är det ett avsteg från vad du skrev att
du försökte åstakomma från början, och när det (att du har bytt krav på
koden) inte tydligt framgår så blir det *riktigt* förvirrat...
nanopile
Inlägg: 312
Blev medlem: 9 april 2006, 17:06:50
Ort: Stockholm

Inlägg av nanopile »

Oj hehe, har jag lyckats med svårförståddhet igen, jag gör tyvärr sådana uttalanden ibland :/
Borde bla ha inlett med "ja, timern går 4 ggr långsammare än klockfrekvensen, det gör hela programkoden, det borde bli 40Mips vid 40MHz men det blir bara 10Mips.
Microchip har löst marknadsföringen genom o kalla 4 klockcykler för en maskincykel och då säger de att det bara tar en klockcykel per instruktion när det egentligen tar 4 per instruktion, låter inte som en lika bra produkt då"

1 Hz var menat att syfta på vad en klockcykel är, enligt mig är det vedrtaget att en klockcykel är just 1 Hz, rätta mig helst om jag har fel.
Hittat några ställen där man tror de menar full fart är enligt klocsignalen och några ställen där man tror att de menar att full fart är klocksignalen delat med 4.
sodjan
EF Sponsor
Inlägg: 43266
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

>>> rätta mig helst om jag har fel.

Gärna ! :-)

1 hz = 1 svängning/sekund.
1 kHz = 1.000 svängningar/sekund
1 Mhz = 1.000.000 svängningar/sekund
o.s.v...
o.s.v...
Se även : http://en.wikipedia.org/wiki/Hertz
(eller vilken skolbok som helst i fysik...)

Så frågan är då, vad i en PIC är den som svänger en gång per sekund ??

>>> det borde bli 40Mips vid 40MHz

Och varför i hel-vete "borde" det bli det ??
Exakt var i dokumentationen antyds det ??
RTFM.
Och det har inte *ett smack* med marknadsföring att göra.

>>> då säger de att det bara tar en klockcykel per instruktion

Så f-n de säger det !!
RTFM.
Det står klart och tydligt att det tar 1 (eller ibland 2 eller 3)
"Instruction Cycles" för att exekvera en instruktion. Inget annat !

Det står även klart och tydligt att "one instruction cycle consists of
four oscillator periods. Thus, for an oscillator frequency of 4 Mhz, the
normal instruction execution time is 1 us."

Läser man lite till så är det också helt klart hur Fosc ("Oscillator Frequency"),
Tosc ("Oscillator Period Time") och Tcy ("Instruction Cycle Time") hänger ihop.

Men, som sagt, det förutsätter att man har RTFM först...

>>> enligt mig är det vedrtaget att en klockcykel är just 1 Hz

Yea, right... :lol:
(Se ovan angående "Hz"...)

> Microchip har löst marknadsföringen genom o kalla 4 klockcykler för en maskincykel

Men... nä, skit samma...

> Hittat några ställen där man tror de menar full fart är enligt klocsignalen
> och några ställen där man tror att de menar att full fart är klocksignalen
> delat med 4.

Visst kan det vara så ! Det är helt beroende på vad det gäller.
"Full fart" på oscillatorn t.ex.
Eller "full fart" på någon peripherial som drivs med Fosc/4.

Avslutningsvis tycker jag att du kan hålla dig till de tekniska bitarna
och skippa konspirationsteorierna...
Seven11
Inlägg: 547
Blev medlem: 13 maj 2004, 23:43:33

Inlägg av Seven11 »

nanopile: har du skrivit assembler kod någongång? för vilken arkitektur och modell? ett tips är att kolla denna tråd: http://www.elektronikforumet.com/forum/ ... php?t=3552 den kan säkert ge en hel del.

sodjan: nej jag försökte åstadkomma en "delay" funktion med hjälp av Timer0 på 1 sekund, sen märkte jag att Timer1 är bättre lämpad för detta då den har 256 ggr så stor räknare vilket ger mindre antal avbrott (från 76 till 10), jämnfört med Timer0, vilket gör att färre instruktionscykler går bort på att serva avbrott. Så ja jag ändrade det hela en del men det var bara för att det fanns ett bättre sätt att göra det på.
sodjan
EF Sponsor
Inlägg: 43266
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Exakt !

Men eftersom det inte finns någon "10-räknare" i din kod så
gör den ju inte samma sak som du beskrev från början (och
nu beskrev igen). D.v.s en 1-sekunders timer.

Och eftersom du underlät att kommentera detta, blev det väldigt
förvirrande kring vad du igentligen ville att koden skulle göra.

I allmänhet, att bara plötsligt säga "löst" utan andra kommentarer än så
eller kopplingar tillbaka i tråden är bara slappt och dålig stil mot de som har
hjälp till under tiden.
nanopile
Inlägg: 312
Blev medlem: 9 april 2006, 17:06:50
Ort: Stockholm

Inlägg av nanopile »

Ok, jag hadde fel, sorry.
Hittar inte det jag tror mig ha läst så det finns nog inte.
Bevisligen är det inte vedertaget med en klockcykel är lika med en Hertz.
Kan jag få hålla fast vid att det bara är en konstruktion att ha en instruction cykle öht?

Tack för upplysningen i det fall att jag inte känt till om Hertz, jag vet hur mycket en hertz är eller 40MHz inbillar jag mig.
Jag menade inte att något går i en Hertz utan satte likhetstecken mellan 1 Hertz och en instruktions påstådda exekveringstid men hadde fel.

Jag skriver assemblerkod för PIC18F442 vilken arkitektur det är vet jag inte, jag har skaffat fram datablad 39564b.pdf från microchip för PIC18FXX2, den gäller för några chip och programmerar efter det databladet.
Jag kan inte säga att jag är speciellt bra på att programmera men det är roligt tycker jag.
Tyvärr lite snålt tilltaget med instruktioner tycker jag, skulle gärna se fler och så skulle jag vilja göra om Cpfseq till att hoppa över när den inte träffar värdet i Wreg, åsikter om detta?
Hur borde man göra med Cpfseq - andvänder jag instruktionen fel?
sodjan
EF Sponsor
Inlägg: 43266
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Helt OK ! :-)
Fel och fel, förresten, det var mest att det lät på dig som om Microchip
skulle "mörka" eller försöka lura någon om hastigheten på processorerna.
Rent *tekniskt* har du du hajjat. Ja, förrutom det här med Hertz då... :-)
Herts är som sagt bara "svängningar per sekund", och inget annat.

> PIC18F442 vilken arkitektur det är vet jag inte,

Det beror lite på vilken mening man för tillfället lägger i uttrycket "arkitektur".
Dels är den ju en del av "PIC18" serien och har alltså "PIC18-arkitektur".
Alla PICs har dessutom i grunden "Harward-arkitektur", d.v.s delad
program och data areor.

> ...och så skulle jag vilja göra om Cpfseq till att hoppa över när den
> *inte* träffar värdet i Wreg, åsikter om detta?

Hm, det är ju bara inversen av CPFSEQ, så det tillför inte så jätte mycket.
Man skulle kanske i något fall kunna spara ett par cykler, men det är
på marginalen. Kan du visa ett exempel där en CPFSNE (Skip Not Equal, eller
vad den skulle kunna heta :-) ) skulle förenkla koden markant ?

> Hur borde man göra med Cpfseq - andvänder jag instruktionen fel?

Kod: Markera allt

      CFPSEQ  f            ; skip om w = f.
      GOTO    not_equal    ; w var alltså inte = f om vi hamnar här !
      <gör något om w = f> ; w var = f om vi hamnar här...
      GOTO    finish

not_equal
      <gör något annat om w != f>

finish
Med en CPFSNE (om den skulle heta så), skulle ju bara logiken bli "omkastad", så att säga :

Kod: Markera allt

      CFPSNE  f             ; skip om w != f.
      GOTO    w_f_equal     ; w var alltså = f om vi hamnar här !
      <gör något om w != f> ; w var != f om vi hamnar här...
      GOTO    finish

w_f_equal
      <gör något annat om w = f>

finish
Så en sådan instruktion ger i praktiken mycket lite extra...
Det enda fallet är om man inte ska göra någonting alls om w = f, då det
skulle bli ungeför :

Kod: Markera allt

      CFPSNE  f             ; skip om w != f.
      GOTO    continue      ; w var alltså = f om vi hamnar här !
      <gör något om w != f> ; w var != f om vi hamnar här...

continue
      <fortsätt med något annat...>
Slutligen,

> Jag kan inte säga att jag är speciellt bra på att programmera men det är roligt tycker jag...

Absolut !
Jag satt i natt till halv-3 med ett demo-program (asm, 18F252, i princip
samma processor som du använder) till en grafisk 240x64 bit LCD display
med Toshiba T6963C controller. Jag har en trave av dom liggandes, och
de åker ut på Tradera under dagen... :-)

Nej, nu har vi snott tillräckligt av Seven11's tråd ! :-)
Seven11
Inlägg: 547
Blev medlem: 13 maj 2004, 23:43:33

Inlägg av Seven11 »

ingen fara sodjan, jag har löst mitt problem även om jag bytte specifikationen en del under gången. Visst kan det tyckas dåligt att ändra sig under problemets gång men det finns samtidigt ingen anledning att fortsätta tugga på ett problem om det finns ett bättre sätt att lösa det på.
sodjan
EF Sponsor
Inlägg: 43266
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Visst kan det tyckas dåligt att ändra sig under problemets gång...

Det är helt OK att ändra sig. Men säg då det så man slipper
undrar över hur 17 den nya koden gör samma sak som den gamla...

PS:
LCD'n jag skrev PIC18 kod till i går natt finns nu här :
http://www.elektronikforumet.com/forum/ ... hp?t=12464 :-)
Skriv svar