[PIC] Plocka bitar och lägg i byte
Vad är det för skillnad på kristall och kristalloscillator?
Elfa hade bara C-MAX kristalloscillatorer.
Men det verkar som att två ben kopplar man till kretsen, ett ben till jord och det andra till jord när man vill enabla. Så det blir väll två till jord och de andra till PICen för min del.
På C-MAX kristalloscillatorerna gör de skillnad på benen till kretsen. Det ena är +5V och det andra output. Fungerar dessa att köra till PICar?
Såg förresten att en del kristalloscillator kör på 3.3V. Hur ska jag lyckas ta reda på det.
Elfa hade bara C-MAX kristalloscillatorer.
Men det verkar som att två ben kopplar man till kretsen, ett ben till jord och det andra till jord när man vill enabla. Så det blir väll två till jord och de andra till PICen för min del.
På C-MAX kristalloscillatorerna gör de skillnad på benen till kretsen. Det ena är +5V och det andra output. Fungerar dessa att köra till PICar?
Såg förresten att en del kristalloscillator kör på 3.3V. Hur ska jag lyckas ta reda på det.
> och som det är nu tar det typ 20us att bara komma in i avbrottsrutinen när PICen körs i 8Mhz.
Det är en *väldigt* lång tid !
Normal "interrupt latency" ska inte vara mer än ett par instruktions cycler.
20 us = 40 cykler. Är det C som gör en massa saker "under the hood" ?
Jag tror inte att du ska fundera på USART'en för detta.
> Frågade på forumet tidigare någon gång skillnaden mellan PIC16Fxxx
> serien och PIC18Fxxx serien och fick inte fram något.
?? Väldigt konstigt! Har du någon länk till tråden ??
> Har dock beställt utvecklingskort för PIC16Fxxx seriern men det kanske
> går att modda så att det fungerar för PIC18Fxxx serien också.
Många PIC18 har i princip samma pinout som vanliga PIC16. Speciellt
i 28 och 40 pin kapsel.
> Vad är det för skillnad på kristall och kristalloscillator?
Kristall = enbart kristall. Använder oscillatorn som sitter i (t.ex) en PIC.
Kräver ingen egen matning.
Kristalloscillator = En kristall + osciallator hoppbyggda i samma kapsel.
Ger TTL/CMOS signal ut och kräver egen matning (5V eller 3.3V är vanligast).
I *ditt* fall ska du ha en *kristall*. t ex. :
http://www.tradera.com/Kristallsats_til ... n-40364545
> Som jag skrev i en annan tråd så ska det gå att köra i 8Mhz och får PICen att agera 1-wire slave.
Sannolikt. Med det går nog åt lite "skohorn", och det är inte säkert att
du har tillräcklig kontroll över instruktionssycklerna från C för att lyckas.
Det är en *väldigt* lång tid !
Normal "interrupt latency" ska inte vara mer än ett par instruktions cycler.
20 us = 40 cykler. Är det C som gör en massa saker "under the hood" ?
Jag tror inte att du ska fundera på USART'en för detta.
> Frågade på forumet tidigare någon gång skillnaden mellan PIC16Fxxx
> serien och PIC18Fxxx serien och fick inte fram något.
?? Väldigt konstigt! Har du någon länk till tråden ??
> Har dock beställt utvecklingskort för PIC16Fxxx seriern men det kanske
> går att modda så att det fungerar för PIC18Fxxx serien också.
Många PIC18 har i princip samma pinout som vanliga PIC16. Speciellt
i 28 och 40 pin kapsel.
> Vad är det för skillnad på kristall och kristalloscillator?
Kristall = enbart kristall. Använder oscillatorn som sitter i (t.ex) en PIC.
Kräver ingen egen matning.
Kristalloscillator = En kristall + osciallator hoppbyggda i samma kapsel.
Ger TTL/CMOS signal ut och kräver egen matning (5V eller 3.3V är vanligast).
I *ditt* fall ska du ha en *kristall*. t ex. :
http://www.tradera.com/Kristallsats_til ... n-40364545
> Som jag skrev i en annan tråd så ska det gå att köra i 8Mhz och får PICen att agera 1-wire slave.
Sannolikt. Med det går nog åt lite "skohorn", och det är inte säkert att
du har tillräcklig kontroll över instruktionssycklerna från C för att lyckas.
Kod: Markera allt
$0004 $ _interrupt:
$0004 $00FF MOVWF STACK_15
$0005 $0E03 SWAPF STATUS, 0
$0006 $0183 CLRF STATUS
$0007 $00D4 MOVWF ?saveSTATUS
$0008 $0804 MOVF FSR, 0
$0009 $00D3 MOVWF ?saveFSR
$000A $080A MOVF PCLATH, 0
$000B $00D5 MOVWF ?savePCLATH
$000C $018A CLRF PCLATH
$000D $087A MOVF STACK_10, 0
$000E $00E4 MOVWF STSAVED_10
$000F $0871 MOVF STACK_1, 0
$0010 $00E3 MOVWF STSAVED_1
$0011 $0870 MOVF STACK_0, 0
$0012 $00E2 MOVWF STSAVED_0
;1Wire_Master.c,63 :: void interrupt() {
;1Wire_Master.c,69 :: if (INTCON.INTF) {
$0013 $1C8B BTFSS INTCON, 1
$0014 $28AD GOTO L_interrupt_2
;1Wire_Master.c,70 :: switch (onewire_state) {
$0015 $2896 GOTO L_interrupt_3
;1Wire_Master.c,72 :: case INITIALIZATION :
$0016 $ L_interrupt_5:
;1Wire_Master.c,73 :: if (OPTION_REG.INTEDG==0) {
$0016 $1303 BCF STATUS, RP1
$0017 $1683 BSF STATUS, RP0
$0018 $3000 MOVLW 0
$0019 $1683 BSF STATUS, RP0
$001A $1B01 BTFSC OPTION_REG, 6
$001B $3001 MOVLW 1
$001C $00F1 MOVWF STACK_1
$001D $0871 MOVF STACK_1, 0
$001E $3A00 XORLW 0
$001F $1D03 BTFSS STATUS, Z
$0020 $2826 GOTO L_interrupt_6
Jo jag vet att jag borde ha en kristall men jag hittade inget annat än en 20Mhz kristalloscillator på en gammalt 3com nätverkskort. Har monterat krsistalloscillatorn så den har ben nu. Behöver dock veta hur den ska kopplas. Två ben verkar vara till jord i alla fall men de andra verkar ju vara matning och output i så fall. Är det bara output som ska kopplas till PICen i så fall?
Alltså, en ytmonterad *kristall* har ofta 4 ben (två i varje ände) där två
st är "no connection" och kan kopplas hur man vill.
> Då kör man i 20Mhz då.
Ja men då så...
> Output på oscillatorn ska kopplas till OSCIN på PIC'en,
Ja, men *vet* vi att det är en *oscillator* och inte en vanlig ytmonterad kristall ???
st är "no connection" och kan kopplas hur man vill.
> Då kör man i 20Mhz då.
Ja men då så...

> Output på oscillatorn ska kopplas till OSCIN på PIC'en,
Ja, men *vet* vi att det är en *oscillator* och inte en vanlig ytmonterad kristall ???
RA6/OSC2/CLKO
Bidirectional I/O pin.
Oscillator crystal output. Connects to crystal or
resonator in Crystal Oscillator mode.
In RC mode, this pin outputs CLKO signal which has
1/4 the frequency of OSC1 and denotes the
instruction cycle rate.
RA7/OSC1/CLKI
Bidirectional I/O pin.
Oscillator crystal input.
External clock source input.
CLKO, det står ju att det är Oscillator crystal output. Ska man inte koppla den till kristallen då? Det fungerar hur som helst. För att vara på den säkra sidan. Är det alltid 2 lödpunkter på kristaller och aldrig 4 lödpunkter?
Tänkte om det är en kristall med inbyggda kondingar som kopplas till jord via de andra benen. Dock förstår jag inte varför den har externa kondingar också i så fall.
Bidirectional I/O pin.
Oscillator crystal output. Connects to crystal or
resonator in Crystal Oscillator mode.
In RC mode, this pin outputs CLKO signal which has
1/4 the frequency of OSC1 and denotes the
instruction cycle rate.
RA7/OSC1/CLKI
Bidirectional I/O pin.
Oscillator crystal input.
External clock source input.
CLKO, det står ju att det är Oscillator crystal output. Ska man inte koppla den till kristallen då? Det fungerar hur som helst. För att vara på den säkra sidan. Är det alltid 2 lödpunkter på kristaller och aldrig 4 lödpunkter?
Tänkte om det är en kristall med inbyggda kondingar som kopplas till jord via de andra benen. Dock förstår jag inte varför den har externa kondingar också i så fall.
Angående ASM koden från kompilatorn...
Din C kompilator använder en "software stack" för att spara undan en del
sakar vid interrupt. Detta tar extra tid och man gör (normalt) inte så när man
kör assembler. De första 15 instruktionerna skulle bli 4-5 instruktioner.
Notera också att på en PIC18 så sparas motsvarande register automatiskt
i samband med interruptet (alltså utan extra instruktioner eller att det
tar någon extra tid), så interrupt är i allmänhet snabbare på en PIC18
än på en PIC16 även vid samma klockhastighet. Registrerna återställs också
automatiskt vid RETFIE (d.v.s "return from interrupt).
Notera att "if (INTCON.INTF) {" går snabbt och enkelt med en BTFSS, medan
"if (OPTION_REG.INTEDG==0) {" blir mycket mer komplext.
Kan du prova med "if (!OPTION_REG.INTEDG) {"
(eller hur man nu skriver "not" i C) för att se om det blir
mer efektivt.
Hur som helst så är det ju tydligt att det inte är så lätt att ha kontroll
över hur många instruktionscyckler man "förbrukar" när man *inte* kör asm...
Din C kompilator använder en "software stack" för att spara undan en del
sakar vid interrupt. Detta tar extra tid och man gör (normalt) inte så när man
kör assembler. De första 15 instruktionerna skulle bli 4-5 instruktioner.
Notera också att på en PIC18 så sparas motsvarande register automatiskt
i samband med interruptet (alltså utan extra instruktioner eller att det
tar någon extra tid), så interrupt är i allmänhet snabbare på en PIC18
än på en PIC16 även vid samma klockhastighet. Registrerna återställs också
automatiskt vid RETFIE (d.v.s "return from interrupt).
Notera att "if (INTCON.INTF) {" går snabbt och enkelt med en BTFSS, medan
"if (OPTION_REG.INTEDG==0) {" blir mycket mer komplext.
Kan du prova med "if (!OPTION_REG.INTEDG) {"
(eller hur man nu skriver "not" i C) för att se om det blir
mer efektivt.
Hur som helst så är det ju tydligt att det inte är så lätt att ha kontroll
över hur många instruktionscyckler man "förbrukar" när man *inte* kör asm...

Det måste vara en ytmonterad kristall. Benen jag trodde var jordade var visst inte det. Det såg typ ut som det om man inte kollade riktigt noga.
Så nu har jag löst den gåtan i alla fall. Bra att veta att om man behöver en 20Mhz kristall så finns de på 3Com:s ISA-kort.
Mjukvarustack. Hmm undrar om man kan skriva interruptet i ASM för att snabba upp det hela. Kom att tänka på att det går att det borde gå att köra en PIC18 utan problem på utvecklingskortet. Ska testa det när jag har fått kortet.
Hoppas inte kompilatorn gör alla dessa dumheter när den kompilerar för en PIC18Fxxx.
Provade att kompilera koden för PIC18F2525 men det klagade på INTCON.INTF så jag antar att det är lite i koden som måste ändras.
Kollade lite på olika PIC18Fxxx. Jag tror att PIC18F2525 eller PIC18F2620 blir bra. Med dem kan jag komma upp i 40Mhz, en hel del minne och får plats i en 28pin PDIP.
Så nu har jag löst den gåtan i alla fall. Bra att veta att om man behöver en 20Mhz kristall så finns de på 3Com:s ISA-kort.

Mjukvarustack. Hmm undrar om man kan skriva interruptet i ASM för att snabba upp det hela. Kom att tänka på att det går att det borde gå att köra en PIC18 utan problem på utvecklingskortet. Ska testa det när jag har fått kortet.
Hoppas inte kompilatorn gör alla dessa dumheter när den kompilerar för en PIC18Fxxx.
Provade att kompilera koden för PIC18F2525 men det klagade på INTCON.INTF så jag antar att det är lite i koden som måste ändras.
Kollade lite på olika PIC18Fxxx. Jag tror att PIC18F2525 eller PIC18F2620 blir bra. Med dem kan jag komma upp i 40Mhz, en hel del minne och får plats i en 28pin PDIP.
Nja, om man tittar lite mer historiskt så var/är de vanligaste PIC16
84A, 629A och hela 87x(A) serien. Idag har dessa ersatts av
modernare modeller där F88 ingår om det är just *18* pinnar man
vill ha. 87xA serien har ersatts av 88x serien. o.s.v....
Om man jämför med dessa i PIC18 serien så är de "3-siffriga"
18F242/252/442/452 de som ligger närmast 16F87xA. Dock har de
idag ersatts av senare "nanowatt" modeller med mer finesser.
Idag är det inte lätt att hitta favoriter. Det finns över 100 PIC18
modeller "In Production" !
Jag hade en hel del problem att hitta en litet urval PIC18 till min PIC-sida,
men det som finns där kan väl kanske ses som mina "val"...
84A, 629A och hela 87x(A) serien. Idag har dessa ersatts av
modernare modeller där F88 ingår om det är just *18* pinnar man
vill ha. 87xA serien har ersatts av 88x serien. o.s.v....
Om man jämför med dessa i PIC18 serien så är de "3-siffriga"
18F242/252/442/452 de som ligger närmast 16F87xA. Dock har de
idag ersatts av senare "nanowatt" modeller med mer finesser.
Idag är det inte lätt att hitta favoriter. Det finns över 100 PIC18
modeller "In Production" !
Jag hade en hel del problem att hitta en litet urval PIC18 till min PIC-sida,
men det som finns där kan väl kanske ses som mina "val"...
