Hjälp med att komma igång med wisp648

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 »

"men nu vet jag inte vilken port jag ska använda till lysdioden..."



*host*

En kommentar hämtad Sodjan's kod:

"Blinka med hela PORTA!"

:)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Som Jimmy sa, vilken pinne som helst på PORTA kan användas.
Notera att jag (för att få lite mer kompakt kod) använder COMF
vilket ställer om hela PORTA...
Användarvisningsbild
ElectricMan
Inlägg: 4874
Blev medlem: 21 februari 2007, 20:22:48
Skype: ElectricManSwe
Ort: Luleå
Kontakt:

Inlägg av ElectricMan »

hur skulle det se ut om man väljer en specifik port då?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Det verkar som om du rör ihop "port" och "pin"...
Användarvisningsbild
ElectricMan
Inlägg: 4874
Blev medlem: 21 februari 2007, 20:22:48
Skype: ElectricManSwe
Ort: Luleå
Kontakt:

Inlägg av ElectricMan »

Aja, pinne då :)

EDIT: eller kan nån förklara lite?
Användarvisningsbild
chrille112
Inlägg: 334
Blev medlem: 25 april 2005, 16:45:24
Ort: Uppsala

Inlägg av chrille112 »

PORTA = 0b00000001

sätter pinne 1 hög på PORTA
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> PORTA = 0b00000001
> sätter pinne 1 hög på PORTA

Nej nej nej, det där kommer bara att ge ett felmeddelande !!

Kolla BCF/BSF instruktionerna. T.ex :

BCF PORTA, 0 ; Sätt RA0 = "0"
BSF PORTA, 0 ; Sätt RA0 = "1"

o.s.v...

(Sen, om du vill, kan du läsa lite om "Read-Modify-Write" (RMW) mot
port-pinnar, men det är lite överkurs just nu...)
Användarvisningsbild
chrille112
Inlägg: 334
Blev medlem: 25 april 2005, 16:45:24
Ort: Uppsala

Inlägg av chrille112 »

Sorry, glömde att det var ASM som gällde. I C fungerar det utmärkt :P
Användarvisningsbild
dechaine
Inlägg: 521
Blev medlem: 7 september 2006, 21:29:51
Ort: Skene

Inlägg av dechaine »

sodjan skrev:Alltså, att *börja* sin resa i PIC världen genom att pilla med firmware
till programmeraren, låter väl kanske inte som riktigt rätt ände... :-) :-)

Och JAL är en väldigt udda konstruktion som det igentligen inte finns
mycket anledning att bry sig om alls.

> Någon som har någon bra exempelkod för att blinka en lysdiod med en 16F628?

Kod: Markera allt

;**********************************************************************
;   Enkelt blink-a-led, 16F628A.
;
;**********************************************************************
;    Other files required:
;    16F628A.LNK (lägg till i projektet som "Linker Script" !)
;
;**********************************************************************

  list      p=16f628A
  #include <p16f628A.inc>
	
  __CONFIG   _DATA_CP_OFF & _CP_ON & _LVP_OFF & _BODEN_OFF & _BOREN_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _MCLRE_ON

RESET_VECTOR    CODE    0x000     ; processor reset vector
  goto    start             ; go to beginning of program


INT_VECTOR      CODE    0x004     ; interrupt vector location
  goto    isr_routine       ; goto main interrupt service routine.
        

;***************************************************************
MAIN    CODE

start

  banksel cmcon
  movlw   h'07'
  movwf   cmcon            ; Stäng av ADC, se databladet om PORTA.

  banksel trisa
  clrf    trisa
  clrf    trisb             ; Alla pinnar = utgångar.

  banksel t1con
  movlw   b'00110001'
  movwf   t1con             ; Se databladet om Timer1.
        
  banksel pie1
  movlw   b'00000001'
  movwf   pie1              ; Enable avbrott från TMR1.

  banksel intcon	
  bsf     intcon, peie     ; Enable "peripheral interrupts".
  bsf     intcon, gie      ; Enable "global interrupts".

loop
  goto loop                 ; Vänta på avbrott (interrupt)...
 


;***************************************************************
ISR_ROUTINE  CODE

isr_routine                ; avbrott/interrupt rutin.

  banksel porta
  comf    porta            ; Blinka med hela PORTA!

  banksel pir1
  bcf     pir1, tmr1if     ; återställ avbrotts flagga.

  retfie

  end

Allt detta för att få en liten led att blinka??
Då känns JAL betydligt mer logiskt... och enklare.. http://www.voti.nl/blink/code/b628-1.jal Rimlig kodlängd för ett "blink a led" program...

Men det är väl bara att man inte ser logiken i det hela än..

Finns det någon "ordbok" över alla förkortningar någonstans??
Samt någon sida (helst på svenska) som förklarar logiken i det hela i detalj?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Vadå "allt detta" ??

Det som står mellan "start" och "loop" har igentligen inte så mycket med
blinkandet att göra, det är finns alltid med i någon form.

> Finns det någon "ordbok" över alla förkortningar någonstans??

Vilka "förkortningar" ?

Vad är det i "logiken" som ska förklaras ? Var lite mer
specifik så går det lättare att svara.

Det bör inte finnas något som inte förklaras i databladet
och/eller i MPASM manualen.
Användarvisningsbild
dechaine
Inlägg: 521
Blev medlem: 7 september 2006, 21:29:51
Ort: Skene

Inlägg av dechaine »

Okej. Ja i den manualen står det en hel del :oops: Bara läst i User´s Guide till MPLAB än så länge.

Tänkte på de förkortningar som t.ex. banksel, movlw, movwf mm.. men det löste ju sig med MPASM.

Ang. logiken tänkte jag på till exempel detta program http://www.voti.nl/stepbots/index.html
Här kan jag direkt förstå sambandet mellan variablarna och alla "anrop", IF etc. men det beror väl på att jag programmerat lite i windowsmiljö (delphi).

Ja ja.. ska läsa på ordentligt i manualen nu (i morgon)!

Är det mellan "main" och "loop" bara "konfigurering" av picen eller vad är det mer exakt?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

BANKSEL är ett "assembler direktive", d.v.s något som styr hur MPASM
jobbar och som ibland (men inte alltid) även skapar kod. Alla direktiv
har ett eget kapitel i MPASM manualen. Det är bara att slå upp.

MOVLW, MOVWF o.s.v är "instructions" och finns bl.a i ett eget
kapitel i alla datablad där det berättas i detalj vad de gör.

Koden fram till "loop" körs bara en gång för att initiera propcessorn
för det som den sen ska göra. Allt "blinkande" görs sedan i ISR_ROUTINE.

Notera att i princip allt som står i MPASM/MPLINK manualen även
finns online i hjälpen i MPLAB...
Användarvisningsbild
Icecap
Inlägg: 26645
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

dechaine: i alla µC program får man starta med att sätta portpinnar i rätt riktning, slå på/av funktioner, starta hårdvara (UART för seriell kommunikation t.ex.), slå på/av interrupt osv. Är man en seriös programmör förlitar man sig ALDRIG på "default" inställningerna.

Detta betyder att det som i sodjans prog. ligger mellan 'start' och 'loop' är just de inställningar och det prog. är till o med ett bra exempel på hur man använder interrupten.

Att man bytar språk betyder INTE att man kan strunta i dessa inställningar, det betyder bara att man ska göra det samma med en annan syntax.

Exempel där jag blandar ASM & C: (varje C-rad utför samma funktion som de ovanstående ASM-rader, '->' används som indikering av C-rad)

Kod: Markera allt

  banksel cmcon
  movlw   h'07'
  movwf   cmcon            ; Stäng av ADC, se databladet om PORTA.
-> CMCON = 0x07; // Samma fast i C

  banksel trisa
  clrf    trisa
-> TRISA = 0x00;

  clrf    trisb             ; Alla pinnar = utgångar.
-> TRISB = 0x00;

  banksel t1con
  movlw   b'00110001'
  movwf   t1con             ; Se databladet om Timer1.
-> T1CON = 0x31;

  banksel pie1
  movlw   b'00000001'
  movwf   pie1              ; Enable avbrott från TMR1.
-> PIE1 = 0x01;

  banksel intcon	
  bsf     intcon, peie     ; Enable "peripheral interrupts".
-> INTCON_PEIE = 1;

  bsf     intcon, gie      ; Enable "global interrupts".
-> INTCON_GIE = 1;
Obs. att dessa C-rader utlöser samma antal (och oftast lite fler) ASM-kommandon, det är alltså bara ett annat sätt att skriva samma sak.
Användarvisningsbild
dechaine
Inlägg: 521
Blev medlem: 7 september 2006, 21:29:51
Ort: Skene

Inlägg av dechaine »

Nu börjar det klarna!
C verkar mycket lättare, så vad är det egentligen som gör att man bör börja med ASM? Är ASM "närmare" maskinkod, så att man kan skriva mer exakt i vissa saker?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> C verkar mycket lättare,

Beror på din definition av "lättare".
Om du bara vil korta ner tidehn att skriva kod, så kan det stämma.
Om du även vill förstå vad som händer och ha 100% kontroll
över vad som händer, så är det kanske inte helt rätt.

Notera att C bara är ett verktyg för att skriva assembler kod... :-) :-)
Skriv svar