PIC-grund på exprimentkort - Fungerar i asm -

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg 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... :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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...
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

>Jag tycker inte att du har testat så värst mycket...

Nä, inte tillräckligt iallafall, eftersom det inte fungerar. :D
(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......
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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... :-)
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg 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. :(
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg 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! :eh: :humm:
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg 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.
Senast redigerad av JimmyAndersson 7 oktober 2005, 00:13:58, redigerad totalt 2 gånger.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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...
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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 !
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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...
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg 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.... :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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 ?
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg 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.
Skriv svar