Sida 3 av 3
Re: PIC16F688 Intern oscillator. Och: Hur löser man problem?
Postat: 25 maj 2010, 13:38:48
av sodjan
Det blir lite O.T här, men kan inte låta bli...
> ...och att ha versionshantering...
Det är ju lite synd att det inte finns fler OS som har versionshantering "by default".
Själv är jag van/bortskämd med det sedan många år :
Kod: Markera allt
$ dir DKA200:[DANK.ARK.HV05]DAP020.OPT
Directory DKA200:[DANK.ARK.HV05]
DAP020.OPT;10 1/35 15-MAR-2005 16:02:27.49
DAP020.OPT;8 1/35 5-NOV-2004 14:10:56.44
DAP020.OPT;7 1/35 5-NOV-2004 14:10:56.44
DAP020.OPT;5 1/35 12-OCT-1999 10:41:28.38
DAP020.OPT;4 1/35 13-JAN-1986 16:30:05.00
Total of 5 files, 5/175 blocks.
$
Bara att kolla i version 4 av filen om man är nyfiken på vad man gjorde halv-5 i
mitten av Januari för 24 år sedan...

Ja, inte vad *jag* gjorde, jag har bara
haft hand om systemet i 2 år nu...
Ångrar man något man har gjort under dagen är det bara att göra t.ex
DELETE/SINCE=TODAY
eller
DELETE/SINCE=LOGIN eller
DELETE/SINCE=<datum> för att "rensa"...
Eller
PURGE för att rensa de *gamla* versionerna, eventuellt kombinerat med
/KEEP=n (n = antal att spara) eller
/BEFORE=<datum> om man är lite osäker...
Sedan 2005 har det tydligen just detta varit stabilt (men det används för fullt i produktion).
Re: PIC16F688 Intern oscillator. Och: Hur löser man problem?
Postat: 25 maj 2010, 13:54:53
av AndersG
Samma funktion finns i NetWare, samt Linux (om man kör NSS)

Re: PIC16F688 Intern oscillator. Och: Hur löser man problem?
Postat: 25 maj 2010, 14:07:05
av sodjan
Hm, det verkar som om NetWare's lösning "bara" innebär att gamla versioner
"läggs undan" och att det inte kan användas direkt som vilken annan fil som helst.
Man måste köra speciella verktyg/kommandon för att göra "retreive" av dom om
man vill använda dom. I OpenVMS är versionsnumret en integrerad del av filnamnet
och alla tillgängliga (sparade) versioner kan användas hur man vill. Inte att
de gamla är "räddningsbara"...
Det är ju väldigt långt från "samma funktion" och mer likt Windows "papperskorg"...
Jag lyckas inte hitta något om NSS mer än att det är en option och mer ser ut
som ett tillägg för att spara äldre versioner. Inte att det är en integrerad
del av filsystemet.
Det jag hittar som kommer lite i närheten är "SCO OpenServer"...
Re: PIC16F688 Intern oscillator. Och: Hur löser man problem?
Postat: 25 maj 2010, 14:53:28
av AndersG
Hm, det verkar som om NetWare's lösning "bara" innebär att gamla versioner
"läggs undan"
Ja, hur många versioner som helst, du bestämmer själv när/hur de "purgas" och du behöver inte köra något speciellt kommando, det är integrerat i utforskaren. Jag ser skillnaden mot OpenVMS, men i praktiken så är det viktigaste för mig att man kan återställa en fil samt att man ser vem som raderat den.
Re: PIC16F688 Intern oscillator. Och: Hur löser man problem?
Postat: 25 maj 2010, 14:57:46
av JimmyAndersson
OpenVMS versionshantering ser väldigt användarvänlig och trevlig ut.
AndersG:
"Ett annat bra tips är att ändra en sak åt gången då man felsöker och att ha versionshantering."
Jag har en egen metod för det.
När jag ändrar saker så brukar jag först kopiera raden jag ska ändra. Sedan kommentera bort kopian och ändra den andra.
Då kan man jämföra det gamla med ändringarna.
Då och då (bl.a vid större ändringar/framsteg, delmål, klar-för-dagen, osv) tar jag en kopia på filerna,
lägger till datum och klockslag i slutet av filnamnet (t.ex belysning_20100525_1443.asm)
och sparar i en katalog ("Material och Backup") i projekt-katalogen.
Sambon har nästan samma system för bildredigering, men hon sätter datum/tiden först.
Det har visat sig vara smidigare för att spåra upp var en bild kommer ifrån.
De bästa versionhanteringsystemen borde vara de som är helt osynliga och inte bromsar arbetet när man behöver titta på en äldre version av något.
Re: PIC16F688 Intern oscillator. Och: Hur löser man problem?
Postat: 27 maj 2010, 15:47:43
av discomike
Glömde skriva att även delay-loopar (räkneloopar) går fel.
Din Delay_1us rutin tar 6us vid 8MHz, kanske kan förklara några av dina observationer? (12 cykler, CALL + 8xNOP + RETURN).
Orka inte räkna om dina andra delay-loopar stämde..
Hur såg din pin-togglande testkod ut? använde du nån loop? = hopp tar 2 cykler.
Re: PIC16F688 Intern oscillator. Och: Hur löser man problem?
Postat: 28 maj 2010, 14:02:22
av JimmyAndersson
Uhm... Citatet kommer från ett av inläggen som handlar om MikroBasic-koden och du baserar "Din Delay_1us rutin tar 6us vid 8MHz" från assembler-koden som jag gjorde senare.
De delayrutinerna används inte ens.
Så jag vet inte riktigt vad du frågar efter tyvärr.
Testkoden var inget speciellt. Såhär:
Kod: Markera allt
program LEDbelysning
'PIC16F688. Intern oscillator på 8MHz.
' Lysdioder 1 - 6 : RC0 - RC5.
' Knapp (JP1) : RA4. (pin 3).
' Pot: RA2. (pin 11.)
'---------------------------------------------
symbol knapp = PORTA.4
symbol JP2 = PORTA.5
dim pot_hi as byte
dim pot_lo as byte
dim pot as word
dim tempknapp as byte
sub procedure Init
TRISA = %00010100 ' Allt till utgångar, bortsett från knappen och poten.
TRISC = $00 ' Alla till utgångar, för lysdioderna.
PORTA = $00 ' Tomt
PORTC = $FF ' Tomt (Inverterat för lysdioderna pga PNP-drivning)
knapplage = 0
INTCON.GIE = 1 'Global interrupt enable bit <--
INTCON.PEIE = 1 'Enable unmasked peripheral interrupts <--
INTCON.T0IE = 0 'Disable the Timer0 interrupt
INTCON.INTE = 0 'Disable the RA2/INT external interrupt <--
INTCON.RAIE = 1 'Enable the PORTA change interrupt <--
INTCON.T0IF = 0 'Timer0 did not overflow
INTCON.INTF = 0 'RA2/INT external interrupt did not occur
INTCON.RAIF = 0 'None of the PORTA-pins have changed state <--<<
IOCA = %00010000 'RA4 interrupt on change. <--
PIE1.EEIE = 0 'Disable the EE write complete interrupt
PIE1.ADIE = 1 'Enable the ADC-interrupt <--
PIE1.RCIE = 0 'Disable the EUSART receive interrupt
PIE1.C2IE = 0 'Disable the comparator C2 interrupt
PIE1.C1IE = 0 'Disable the comparator C1 interrupt
PIE1.OSFIE = 0 'Disable the oscillator fail interrupt
PIE1.TXIE = 0 'Disable the EUSART transmit interrupt
PIE1.TMR1IE = 0 'Disable the Timer1 overflow interrupt
PIR1 = $00 'Cleara alla interrupt
PIR1.ADIF = 0 'AD interrupt clear <--
PCON = %00000011 'Ingen Ultra Low-power Wake-up, BOR, POR eller BOR
OSCCON.6 = 1 '8MHz IRCF2
OSCCON.5 = 1 '8MHz IRCF1
OSCCON.4 = 1 '8MHz IRCF0
OSCCON.SCS = 0 'Fosc "är" systemklocka
WPUA = $00 'Inga pull-up
T1CON.TMR1ON = 0 'Timer1 avstängd
CMCON0.CM2 = 1 'Comparators avstängda
CMCON0.CM1 = 1 'Comparators avstängda
CMCON0.CM0 = 1 'Comparators avstängda
VRCON.VREN = 0 'CVref powered down
ANSEL = %00000100 'AN2 (pin 11) analog. Resten digitala
ADCON0.ADFM = 1 'Högerjusterad AD
ADCON0.VCFG = 0 'Vdd som referens
ADCON0.CHS2 = 0 'Channel: AN2 (pin 11)
ADCON0.CHS1 = 1 'Channel: AN2 (pin 11)
ADCON0.CHS0 = 0 'Channel: AN2 (pin 11)
ADCON0.ADON = 1 'ADC enabled <--
ADCON0.GO_DONE = 1 'AD-conversion in progress <--
ADCON1.ADCS2 = 0 'AD Conversion clock: Fosc/32 = 250kHz
ADCON1.ADCS1 = 1 'AD Conversion clock: Fosc/32 = 250kHz
ADCON1.ADCS0 = 0 'AD Conversion clock: Fosc/32 = 250kHz
TXSTA.TXEN = 0 'EUSART transmit disabled
RCSTA = $00 'EUSART port disabled
BAUDCTL.ABDEN = 0 'Auto-baud detect disabled
WDTCON.SWDTEN = 0 'WDT turned off
end sub
sub procedure interrupt
'Knapp-interrupt
if TestBit(INTCON,RAIF) = 1 then
tempknapp = knapp
'
ClearBit(INTCON,RAIF)
SetBit(INTCON,RAIE)
end if
'Pot-interrupt
if TestBit(PIR1,ADIF) = 1 then
ClearBit(PIR1,ADIF)
pot_lo = ADRESL
pot_hi = ADRESH
'pot = (word(pot_hi << 8)) OR pot_lo 'Slå ihop höga och låga delen (Blir 0 - 1024)
SetBit(ADCON0, ADON)
SetBit(ADCON0, GO_DONE)
end if
end sub
Main:
Init
while true
PORTC = %11000000
delay_ms(1000) ' Tar 5 gånger så lång tid när ADC-interrupt är enabled. <----
PORTC = %11111111
delay_ms(1000)
wend
end.
edit:
Jag har under några dagar tänkt på råden jag fick i den här tråden (när det gäller problem rent generellt)
och även om det fortfarande går åt många timmar till att fundera på lösningar så känner jag helt klart att
assembler och jag har hittat tillbaka till varandra igen.

Visst fanns det stunder då jag tänkte på andra (C och MikroBasic), men assembler är ändå speciell.
Vi löser problem ihop och när det uppstår smarta lösningar så inser jag att de är mycket snyggare i assembler.

Re: PIC16F688 Intern oscillator. Och: Hur löser man problem?
Postat: 28 maj 2010, 15:07:34
av discomike
ok, nevermind =)