Sida 2 av 3
Postat: 5 oktober 2005, 01:23:46
av JimmyAndersson
Jepp, har provat att bara sätta en utgång. Det fungerar. Det ser ut som om det låser sig när det är något delay med i koden.
Om jag tar bort delay-raderna i koden ovan så fungerar det och utgångarna är mycket riktigt låga när PIC-kretsen kört koden. (Har provat att byta plats på $FF och $00 och då är utgångarna höga när den kört koden.)
Har även provat att köra utan programmeraren.
Från början hade jag glömt att ställa in HSPLL (som krävs för 40MHz) men den missen har jag bara gjort en gång. Brukar kolla för säkerhetskull innan jag "gör" hex-filerna och skickar över till PIC-kretsen.
Usch ja, om en IC-krets ryker så är det lätt att förstå vad som är fel. (Det är bara att tyda röksignalerna ...)
Såna här fel är lite roliga ändå: Man testar "allt" och inget hjälper. Sedan när man kommer på vad som var fel, så är det jättelätt att åtgärda! Mycket märkligt...

Postat: 5 oktober 2005, 10:55:59
av sodjan
Vid den här typen av "felsökning" gäller det att förenkla hela uppsättningen så mycket som möjligt. Tyvärr motverkar olika tredjeparts verktyg (som t.ex C eller Basic kompilatorer) det hela, de tillför ett extra "lager" som man inte har full koll över.
Det *jag* hade gjort (om jag hade suttit i samma situation med Basic) hade varit att omedelbart kasta ut Basickompilatorn och verifierat det hela med en kort assembler snutt.
Det finns många exempel på utvecklingsverktyg som ursprungligen togs fram till PIC16-serien, men som sedan har "patchats upp" för att även klara PIC18-serien, med varierande resultat.
Om jag tolkar ditt senaste inlägg korrekt, så perkar mycket just nu mot att "delay_ms" inte fungerar som det ska vid 40 Mhz, inte otroligt, det blir ju ganska annorlunda kod som skall genereras (ur processorns perspektiv är det ju en 4 gånger så lång delay som skall genereras.)
> Har även provat att köra utan programmeraren.
Vilket inte borde göra någon skillnad...
> Man testar "allt" och inget hjälper.
Jag tycker inte att du har testat så värst mycket...
Postat: 5 oktober 2005, 17:38:22
av JimmyAndersson
>Jag tycker inte att du har testat så värst mycket...
Nä, inte tillräckligt iallafall, eftersom det inte fungerar.
(Det jag skrev i förra inlägget var rent allmänt menat.)
Men jag ska göra en liten test i assembler. Det är ju helt rätt att man ska göra det så rent och enkelt som möjligt, för att få bort så många eventuella felkällor som möjligt.
edit: Hm, hur ställer jag in HSPLL i config i assembler? Jag har aldrig programmerat någon PIC-kod i assembler. Sätta TRISB låg och PORTB hög är inga problem, men det hjälper inte så långt om inte början i koden, dvs config, är rätt.
En "blink-a-led" skrivet i 100% korrekt skriven assembler för en PIC som snurrar med 40MHz vore betydligt mer felsäkert än mina "trial-and-error"-försök med att ställa in rätt hastighet i config i assembler.
Letar just nu i Google....
edit 2: Hittade inget kodexempel som är skrivet för min PIC-krets och 40MHz. Finns det någon på forumet som har lite extra fritid, så har jag ett tips på vad ni kan göra......
Postat: 5 oktober 2005, 22:06:33
av Kaggen
Jimmy: Har du satt nån switch i Basicen för att tala om vilken PIC du använder? Vet inte mycket om 18-serien, men det kan ju vara att dom inte är exakt kod-kompatibla så vissa asm-kommandon kanske har en annan opcode i 18-serien än 16-serien? Sodjan kanske vet?
Om du kopierat nåt exempel, kolla att inte switcharna sätts på flera ställen i koden. T.ex av dig på ett ställe och av exempelkoden på ett annat ställe.
Annars skulle du ju kunna testa ändra värdet på delay:en i ganska stora steg ner/upp t.ex en tiondel eller gånger tio.
Postat: 5 oktober 2005, 22:25:38
av sodjan
Har kört ett simpelt prog i en 18LF1320 :
Kod: Markera allt
list p=18F1320
#include "p18f1320.inc"
; Byt mellan HS och HSPLL nedan :
; config OSC = HS
config OSC = HSPLL
config FSCM = OFF, IESO = OFF, PWRT = ON
config BOR = OFF, WDT = OFF, MCLRE = ON, LVP = OFF
config DEBUG = OFF, CP1 = OFF, CPB = OFF, CPD = OFF
config WRT0 = OFF, WRT1 = OFF, WRTB = OFF, WRTC = OFF
config WRTD = OFF, EBTR0 = OFF, EBTR1 = OFF, EBTRB = OFF
main code
movlw 00h
movwf TRISA ; Hela PORTA = output.
loop
bsf PORTA, 0
nop
bcf PORTA, 0
goto loop
end
Fungerar lika bra med HS som HSPLL. Med HS får jag en 500 Khz signal på PORTA.0, med HSPLL en 2 Mhz signal, helt OK.
> Vet inte mycket om 18-serien...
I princip är de 35 instruktionerna från PIC16 serien samma (med ett par luriga undantag), men PIC18 serian har totalt 72 instruktioner, så det är flera som har tillkommit. Flera av dessa gör programmeringen effektivare och koden kortare. Hm, kanske att man skulle skriva en "PIC16 to PIC18 migration" sida...

Postat: 5 oktober 2005, 22:33:38
av JimmyAndersson
Kaggen: I MikroBasic ställer man in vilken PIC man använder när man gör ett nytt "Projekt". Den valda kretsen syns sedan till vänster på skärmen när man programmerar. Likadant med frekvensen.
Jag har gjort egna minimala koder innehållande fyra rader:
TRISB
PORTB = $FF
delay_ms(500)
PORTB = $00
Så när det gäller dubbla switchar så är allt under kontroll.
Har gjort 18st tester, alla med olika inställningar, så jag har täckt in de flesta delay-tider. Sedan tycker jag att 500ms inte vore några problem på något som ska gå i 40MHz.
Hittills har jag inte sett någon som kör med en PIC18xxxx i 40MHz. Sodjan skulle göra ett test med en likadan som jag har. Ska bli spännande och se resultatet.
För övrigt så har jag haft kretsarna i snart en månad. Hela tiden har gått åt till att försöka få det att fungera... Tur att man är envis!
Sodjan: Ska testa assembler-koden här.
edit: Visst ja, jag kan inte mäta signalen. Saknar oscilloskop.

Postat: 5 oktober 2005, 22:55:54
av JimmyAndersson
1. Startade MPLAB IDE v7.21
2. Valde "Project Wizard" och ställde in rätt PIC-krets (dvs PIC18F1320) och valde namn + sökväg
3. Gjorde en source-fil och klistrade in asm-koden ovan.
Resultat?
Executing: "D:\Program\Microchip\MPASM Suite\MPAsmWin.exe" /q /p18F1320 "test_igen.asm" /l"test_igen.lst" /e"test_igen.err"
Error[149] _SÖKVÄGEN_\PIM-MPLAB\TEST_IGEN.ASM 15 : Directive only allowed when generating an object file
Warning[220] _SÖKVÄGEN_\PIM-MPLAB\TEST_IGEN.ASM 17 : Address exceeds maximum range for this processor.
Error[118] _SÖKVÄGEN_\PIM-MPLAB\TEST_IGEN.ASM 17 : Overwriting previous address contents (000D)
Warning[220] _SÖKVÄGEN_\PIM-MPLAB\TEST_IGEN.ASM 18 : Address exceeds maximum range for this processor.
Warning[220] _SÖKVÄGEN_\PIM-MPLAB\TEST_IGEN.ASM 21 : Address exceeds maximum range for this processor.
Warning[220] _SÖKVÄGEN_\PIM-MPLAB\TEST_IGEN.ASM 22 : Address exceeds maximum range for this processor.
Warning[220] _SÖKVÄGEN_\PIM-MPLAB\TEST_IGEN.ASM 23 : Address exceeds maximum range for this processor.
Error[126] _SÖKVÄGEN_\PIM-MPLAB\TEST_IGEN.ASM 24 : Argument out of range (0011 not between 0000 and 1FFF)
Warning[226] _SÖKVÄGEN_\PIM-MPLAB\TEST_IGEN.ASM 24 : Destination address must be word aligned
Warning[220] _SÖKVÄGEN_\PIM-MPLAB\TEST_IGEN.ASM 24 : Address exceeds maximum range for this processor.
Warning[220] _SÖKVÄGEN_\PIM-MPLAB\TEST_IGEN.ASM 24 : Address exceeds maximum range for this processor.
Error[173] _SÖKVÄGEN_\PIM-MPLAB\TEST_IGEN.ASM 27 : Source file path exceeds 62 characters (_SÖKVÄGEN_\PIM-MPLAB\TEST_IGEN.ASM)
Halting build on first failure as requested.
BUILD FAILED: Wed Oct 05 22:49:26 2005
Jag kan inte MPLAB IDE så jag vet inte vad jag gjort för fel.
Har inte gjort några andra inställningar. Det jag gjort står i punkt 1-3 högst upp i detta inlägg.
Kort sagt: Hjälp!

Postat: 5 oktober 2005, 23:08:08
av JimmyAndersson
Behövde ett program som blinkar med en lysdiod och är skrivet i assembler, som är skrivet för en PIC18F1320 och som kör med 40MHz. Programmet ska vara "build" till en HEX-fil och antingen publicerat här, eller mailat till mig.
EDIT: Det löste sig. Därför kortade jag ner detta inlägg.
Postat: 5 oktober 2005, 23:42:22
av sodjan
> Directive only allowed when generating an object file
Du har inte lagt till något "Linker Script" till ditt projekt i MPLAB, och alltså kör MPLAB i "Absolut Mode". Min kod är skriven för "Relocatable Mode", vilket är vad man ska använda i dag, abs mode är på väg ut...
Se :
http://www.jescab.se/Info_MPLAB.html för detaljer om konfigureringen av MPLAB.
Se även :
http://www.jescab.se/Rellocmode.html
Sen, jag orkade inte göra fördröjningar för att få en synlig blinkning (ville bara kolla att det snurrade alls), men jag kan fixa det i morgon...
Postat: 6 oktober 2005, 00:02:30
av JimmyAndersson
"BUILD SUCCEEDED: Wed Oct 05 23:50:03 2005". Tack!
-Bra beskrivningar om MPLAB på din sajt, förresten!
Fick bara ett felmeddelande, men det var för att sökvägen var alldeles för lång till asm-filen...
Tänkte använda detta asm-exempel och plugga lite assembler nu.
Jo, det vore jättebra om du kunde fixa en led-blink-test. Fungerar den på din krets och jag kan få samma HEX-fil så har jag ett pålitligt test-program.
Postat: 6 oktober 2005, 13:24:19
av sodjan
OK, här kommer ett nytt program.
Använder TMR0 för blinkintervallet.
En LED på PORTA.0 blinkar i ca 1 Hz med "HS" och
med ca 4 Hz med "HSPLL".
Kod: Markera allt
list p=18F1320
#include "p18f1320.inc"
config OSC = HS
; config OSC = HSPLL
config FSCM = OFF, IESO = OFF, PWRT = ON
config BOR = OFF, WDT = OFF, MCLRE = ON, LVP = OFF
config DEBUG = OFF, CP1 = OFF, CPB = OFF, CPD = OFF
config WRT0 = OFF, WRT1 = OFF, WRTB = OFF, WRTC = OFF
config WRTD = OFF, EBTR0 = OFF, EBTR1 = OFF, EBTRB = OFF
boot code h'0000'
goto main
int code h'0008'
btg PORTA, 0
bcf INTCON, TMR0IF
retfie 1
main code
main
movlw h'7F' ; Hela PORTA dig I/O
movwf ADCON1
movlw h'00' ; Hela PORTA = output.
movwf TRISA
movlw b'10000011' ; TMR0 on, 1:16 prescaler.
movwf T0CON
movlw b'11100000' ; Enable TMR0 interrupt.
movwf INTCON
loop
goto loop ; Wait for TMR0 overflow...
end
Glöm inte att lägga till LNK filen till projektet !
Postat: 6 oktober 2005, 13:26:50
av sodjan
Angående Error[173]... (Source file path exceeds 62 characters...)
Du skall normalt inte kunna få detta om du kör i "relocatable mode"...
Konstigt...
Postat: 7 oktober 2005, 00:18:53
av JimmyAndersson
Det gick lyckligtvis bättre när jag kopierade projektet till d:\test\ då fick jag inga sådana fel.
Testade assemblerprogrammet ovan och: Både PIC18LF1320 och PIC18F1320 fungerar i både 10MHz och 40MHz!
edit: I MikroBasic är det en annan historia...
Trodde först att det fungerade, men jag hade glömt att ändra "Clock" till 40MHz....
Har igen gjort lite tester, bl.a ett RS232-test och där jag tittade på vad datorn tog emot. (LF-kretsen skickade bara "brus-tecken", F-versionen skickade bara streck.)
Men eftersom "blinka-led"-testerna jag gjort i Mikrobasic inte fungerar i 40MHz så är något fel i MikroBasic.
Har skickat ett långt mail till MikroBasic´s office....

Postat: 7 oktober 2005, 12:25:17
av sodjan
Jag har för mig att M-B själv väljer LF/XT/HS (HSPLL?) beroende på vilken kristallfrekvens man anger. Det verkar som om denna automatik inte korrekt stöder HSPLL läget. Vi får se vad de svarar...
När jag testade M-B så har jag för mig att man såg i någon (temp) fil vilket oscillator "läge" som M-B hade valt, så man kan antagligen kolla det själv.
För övrigt är det skönt att det fungerar nu...
Vill du behålla alla processorerna ?
Eller returnerar du de jag sände över senast för tester ?
Postat: 7 oktober 2005, 19:56:41
av JimmyAndersson
När man skapar ett projekt i M-B så måste man välja processor och knappa in frekvensen. I "edit-menyn" kan man sedan välja olika config-grejjer. Så det går att skriva in 010.000000 (10MHz) och ändå välja HSPLL.... Eller så kan man (som jag gjorde först) knappa in 40MHz och HS.
Det skulle varit bättre om HSPLL var default i config om man skrev in 40MHz, istället väljs alltid HS om man klickar på 'default' i configinställningarna. Annars står det ingenting där.
Kollade för säkerhetskull på M-B's sajt om det är något mer man behöver göra när man väljer hastighet, men det ska räcka med att mata in frekvensen och LF/XT/HS/HSPLL.
Jo, jag behåller dem gärna. Det är bra att ha några stycken för framtida projekt. Du kan ju PM'a mig om priset.