Fredjuhh
"Ben nog een N00B, maar dat is al aan het veranderen ;)
De rekensnelheid van mijn pic 16f627 valt mij een beetje tegen. Ik kom uit op Ongeveer 81917 berekeningen per sec.
Klopt dit wel, ik dacht dat hij op 4 MHz zou lopen, of zit daar ook die gedeeld door 4 factor in?
Ik had namelijk even een test proggie gemaakt om 5 leds aan te sturen, en daar doet hij ongeveer 4 sec. over.
Wie kan mij daar even meer over vertellen?
Alvast bedankt, Fred
Misschien een horloge/aflees fout?
Proggie:
DEVICE 16F628A ;Gebruik een 16F628A type
;MAAR IK GEBRUIK NU EEN 16F627
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
PORTA = %00000000
PORTB = %00000000
; 76543210
TRISA = %11111111
TRISB = %11000000
DIM x AS WORD ; kan tot 65535 tellen
SYMBOL LED1 = PORTB.0
SYMBOL LED2 = PORTB.1
SYMBOL LED3 = PORTB.2
SYMBOL LED4 = PORTB.3
SYMBOL LED5 = PORTB.4
SYMBOL LED6 = PORTB.5
begin:
WHILE 1 = 1
HIGH LED6
REPEAT
x = x + 1
UNTIL x = 65534
IF LED4 = 1 THEN HIGH LED5
IF LED3 = 1 THEN HIGH LED4
IF LED2 = 1 THEN HIGH LED3
IF LED1 = 1 THEN HIGH LED2
HIGH LED1
IF LED5 = 1 THEN x = 0
IF x = 0 THEN LOW LED1
IF x = 0 THEN LOW LED2
IF x = 0 THEN LOW LED3
IF x = 0 THEN LOW LED4
IF x = 0 THEN LOW LED5
WEND
END Edit: even met een online stopwatch gedaan, en toen kwam ik op 3,5 sec, dus dan kom je op 93620 loops per sec. Dus dat zou dan wel de 1MHz zijn he?!?!?! Of is het nog afhankelijk van hoe groot je programma is????
En als ik er nu eens een 20MHz kristal aan hang, wordt hij dan ook sneller?? Vlgns mij wel..
Op 25 februari 2009 23:16:10 schreef Fredjuhh:
Klopt dit wel, ik dacht dat hij op 4 MHz zou lopen, of zit daar ook die gedeeld door 4 factor in?
Waarom zou daar niet die faktor in zitten? Lees de datasheet.
Fredjuhh
"Ben nog een N00B, maar dat is al aan het veranderen ;)
Op 25 februari 2009 23:22:58 schreef Henry S.:
[...]
Waarom zou daar niet die faktor in zitten? Lees de datasheet.
Ohh niet zo aggresief hoor
Ik heb net voor het eerst in mijn leven een pic processor vast
Ik kijk van mezelf op, dat ik er in 2 uur al een programma heb opgezet 
Vorige week wist ik nog niet eens het bestaan van die dingen, dus je kunt niet even verwachten dat ik nu ineens alles weet!!
Maar goed, ik had dus wel de juiste ideeen 
Zie ook mijn edit uit de vorige post 
Op 25 februari 2009 23:27:23 schreef Fredjuhh:
[...]
Ohh niet zo aggresief hoor
Gewoon een logische vraag 
Vorige week wist ik nog niet eens het bestaan van die dingen, dus je kunt niet even verwachten dat ik nu ineens alles weet!!
Maar het is wel een echte opzoekvraag.
Processorsnelheid is intern bepaald door een RC-netwerk, extern door X-tal/RC-netwerk/externe clock.
Snelheid varieert dus niet met de lengte van een programma of de stand van de maan.
De faktor 4 ligt ook voor al deze instellingen vast en is gebonden aan de manier hoe de uC de instructies verwerkt.
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
als je de pic op 4MHz clock dan voert hij 4 miljoen MACHIENETAAL bewerkingen per seconde uit ... sommige MACHIENETAAL instructies hebben 2 of meer clockticks nodig.
als jij een hogere taal gebruikt dan wordt een lijn ocde misschien vertaald in 2 ,5, 10 of zelfs wel honderden instructies.
als jij schrijft print "hello world" , x dan voert te processor makkelijk een paar honderd instructies uit.
benleentje
Golden Member
Dat is bij de PIC niet waar F_E. De pic voert maar 1 miljoen machine taal instructies uit. De micro code moet eerst uit het gehegen gelezen worden daarna vertaalt dan moeten daarna eventueel nog data opgehaalt worden de instructie uitgevoerd op de data en het resultaat weggeschreven worden. Elke klok tik doet de pic wel wat maar eens in de 4 kloktikken wordt ook daadwerkelijk een instructie afgerond of 8 voor sommige.
Overigens is het commande high led of low led niet aan te bevelen. Met dit commando wordt de poort eerst nog even als output gezet ook al stond deze als output.
Med het commande led1 = 1 zet je hem ook hoog maar dan direkt zonder omwegen. Zo zet led1 = 0 de output weer laag.
Fredjuhh
"Ben nog een N00B, maar dat is al aan het veranderen ;)
Kijk alles begint op zijn plaats te vallen
die 0 en een die benleentje zegt wist ik van de picbasic curses
Maar had dat in dit test proggie nog niet toegepast 
Wat je het eerst leert onthoud je het best, dus moet dat weer afleren.
Maar als ik er dus een kristal van 20MHz aan hang dan wordt mijn klok dus 5MHz dus ongeveer 5000000 loops per seconden?
Fuzzbass
Mijn echte naam: Joris | Mijn elektronica website: Fuzzcraft.com
Je vergeet even dat er nog een compiler tussen zit. Direct in assembler kun je de snelheid maximaliseren.
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
Op 25 februari 2009 23:50:35 schreef benleentje:
Dat is bij de PIC niet waar F_E. De pic voert maar 1 miljoen machine taal instructies uit.
damn. mijn lage dunk van de pic valt nog lager ... ik dacht dat het ene 2 step machiene was en dat sommige in 1 tick konden. ( zoals bewerkingen in de registers van de processor. ) blijkbaar nit dus.
RISC my ass ... geef mij maar CISC met zoveeeeel mogelijk instructies. das minder werk voor mij 
[Bericht gewijzigd door free_electron op (11%)]
Daan Timmer
Ik ben programmeur! geen electronicus! http://www.daantimmer.nl/ Er is een ontwerp! nu nog inhoud :-)
@F_E, de 16-bit pic reeks (behalve de dsPIC30F en PIC24FJ) hebben idd 2clock cycles nodig voor 1instructie cycle.
(Die andere hebben, net zoals de 8-bitters 4clock cycles nodig voor 1instructie 
Gatze
Congratulations on your purchase. To begin using your quantum computer, set the power switch to both off and on simultaneously
Ben_
http://www.webchemistry.nl - Internet Ontwikkeling en Web Design | http://www.scienceflicks.com Science Videos | http://www.merghart.com/p/26/Electronics My electronics projects
Op 26 februari 2009 00:00:17 schreef Fredjuhh:
Maar als ik er dus een kristal van 20MHz aan hang dan wordt mijn klok dus 5MHz dus ongeveer 5000000 loops per seconden?
Tja, tenzij die loop conditional is, dan gaat er ook alweer tijd zitten in het checken daarvan.
Op 20 MHz draait het ding 5 miljoen assemby instructies per seconde af (program branches daargelaten), maar het equivalent in high-language instructies daarvan -kan- veel lager liggen.
Iets als PORTA=255; gaat in 1 instructie, maar als je pakweg 2 floating point getallen op elkaar wilt delen is het eerder 100, zo niet meer.
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Als ik me goed herinner, doet een AVR wel 1 instructie (de meeste dan) per clockcycle. Nu gaan de meeste ook maar tot 16MHz, terwijl de meeste PICs met een kristal van 40MHz overweg kunnen, dacht ik. Het is al wel heel lang geleden dat ik iets met een PIC heb gedaan, dus ik kan er best naast zitten.
Daarbij heeft de TS binnen die loop 10 if statements (oftewel branch instructions). Nu is de pipeline van zo'n PIC natuurlijk niet zo groot, maar bij een gebrek aan branch prediction zal die wel regelmatig weggemikt kunnen worden (een zogenaamde pipeline stall).
De onderste 5 if-statements kunnen sowieso vervallen, door van de "IF LED5 = 1 THEN x = 0" een blok te maken. Daarbij kun je alle LEDs tegelijk uitzetten, door direct naar poort B te schrijven, maar dan kun je de LEDs niet meer naar andere pinnen mappen.
Je kunt het hele ding sowieso reduceren tot
PORTB = ( PORTB & 0xC0 ) | ( ( PORTB & 0x20 ? 0 : ( PORTB << 1 ) | 0x01 ) & 0x3F );
Dan heb je er nog maar 1 branch instructie in zitten. Toegegeven, veel leesbaarder wordt het niet. Het kan ook in meer regels, waardoor het leesbaarder wordt, met nog steeds maar 1 branch instructie.
Uitleg: neem eerst de hoogste 2 bits van PORTB, en kopieer die zonder ze te veranderen, controleer vervolgens of bit 5 hoog is, zo ja, vul dan de lage bits met 0, zo nee, schuif dan de lage bits 1 plaats naar links en zet een 1 in het laagste bitje. De laatste AND is om te voorkomen dat je de hoogste 2 bits van PORTB verschuift.
een PIC kan volgens datasheet met maximaal 20 MHz geklokt worden. (ik heb echter een PIC16F688 geklokt met 50 MHz, en dat loopt stabiel)
de instruction clock is 1/4 van de system clock (bij 20 MHz system clock dus 5 MHz instruction clock)
De meeste instructies hebben 1 klockcyclus nodig.
bij PIC12/PIC16 gelden de volgende uitzonderingen daarop:
- Goto: 2 klokcycli
- Call: 2 klokcycli
- Return/Retlw: 2 klokcycli
- BTFSC/BTFSS: 1-2 klokcycli, afhankelijk van de conditie.
Als je in C code gaat schrijven, dan moet je er van uit gaan dat je C-krompiler uit een enkele regel C-code meedere regels assembly maakt.
Dus om nou te zeggen dat een PIC die met 20 MHz (5 MHz instruction clock) 5.000.000 x per seconde een bepaalde regel C-code, of zelfs een hele lus uitvoert is wel heel erg kort door de bocht.
en voor een if-then-else constructie met variabelen van het type bool of char zijn in PIC-assembly toch wel al gauw een 5-tal machine-code instructies nodig. Ga je ints,floats en dergelijke vergelijken, dan wordt het al behoorlijk snel flink ingewikkelder, en zijn dus flink meer instructies nodig.
@free_electron:
een PIC12/16 is vergelijkbaar met een 8080/8085, geen hardware voor vermenidgvuldigen en delen aan boord (itt. de 8051, die een MUL en DIV kent)
Phlogiston
"If a rocket goes up, who cares where it comes down." - Wernher von Braun
Op 26 februari 2009 12:45:27 schreef DC2PCC:
een PIC kan volgens datasheet met maximaal 20 MHz geklokt worden.
Dat geldt voor de simpelere PIC's, de baseline en midrange PIC10/12/16: 20MHz, 5 MIPS.
Enhanced midrange (nieuw Q1/Q2 2009) PIC12F1xxx en PIC16F1xxx: 8 MIPS
PIC18: tot 64MHz, 10-16 MIPS
Dat zijn allemaal 8-bitters.
16-bitters: tot 40MHz, 16-40 MIPS
32-bitters: tot 80MHz, tot 125 Dhrystone MIPS
daarbij worden hogere interne snelheden (bijv 80MHz bij 16-bitters) dmv PLL gegenereerd.
Dit overzicht is niet compleet, zie www.microchip.com 
en de 32 bitters gaan tot 80Mhz onderhand.
ik ga denk ik zo;n testbordje ervan bestelen, is maar 50 euro ofzo.
maar als je echt snelheid wilt moet je een Arm nemen of een parallax propeller.
die laatste had dacht ik 8 cores, op max 80Mhz en haalde 160 MIPS.
allemaal leuk, maar voor het meeste grut is een simpel picje genoeg.
Fredjuhh
"Ben nog een N00B, maar dat is al aan het veranderen ;)
Bedankt voor alle antwoorden 
Het is niet de bedoeling dat ik dit programma ga gebruiken hoor 
Dit was alleen even een testje voor mij, om te kijken of ik al wat kan programmeren, en natuurlijk even om te kijken hoe snel een pic bepaalde instructies kan doen.
Fred
[Bericht gewijzigd door Fredjuhh op (64%)]
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
Op 26 februari 2009 10:51:03 schreef shizzle dizzle:
Een AVR heeft 1 clockcycle nodig voor een instructie......
en hoeveel clockpulsen in een cycle ? 200 ?
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
nee, ook 1. Een AVR op 20mhz doet 20MIPS. Op die paar instructies na dioe 2 kloktikken vragen. Ook een leuke: Attiny26 heeft een 16mhz interne klok (moet je even goed de datasheet voor lezen, PPLCLK oid fuse). Vind maar eens een PIC voor dezelfde prijs die dat heeft (met evenveel codespace, MIPS, en adc,pwm etc) 
Ik gebruik zowel PIC als AVR, dus best of both worlds.
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
picsels
Volgend project: 7-seg gaming displays; dan dec-1982 labvoeding afmaken, dan funcgen met ad9833 afmaken, dan...
Op 26 februari 2009 19:06:54 schreef Fredjuhh:
Echter als je maar 15Hz hebt, moet je dus 1 Sec. meten voor 15 pulsen, dus kun je pas na 1 sec reageren, en dat is veel te laat.
Of de tijd meten tussen 2 pulsen...
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Vind maar eens een PIC voor dezelfde prijs die dat heeft (met evenveel codespace, MIPS, en adc,pwm etc)
PIC24xxx? (40 MIPS)

