Timer0 och PIC16F877A
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: vilka kriterier syftar du på?
> 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...
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...
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.
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.
>>> 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...
(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...
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...
(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...
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: 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å.
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.
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.
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?
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?
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?
Med en CPFSNE (om den skulle heta så), skulle ju bara logiken bli "omkastad", så att säga :
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 :
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 !
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
> 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>
finishKod: 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>
finishDet 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...>> 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 !
> 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
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
