Sida 1 av 1

Nybörjar problem med mikroBasic.

Postat: 5 december 2005, 15:39:16
av brange
Hejsan.

Har precis fått igång min PIC programmerare (wisp628) efter många om och men:) (tack till er som hjälpte mig)

PIC: PIC16F628A

Jag har börjat leka lite smått med den nu, med lite "blink a led" program i olika språk, bl.a. C, pascal, basic.

Har inte riktigt bestämt mig för vilket språk jag ska fortsätta med.
Men jag har ett problem i Basic, programmet ska få två lysdioder (kopplade till an0 och an1 på bankA att blinka)

Kod: Markera allt

program LED_blinking

TRISA.0 = 0             
TRISA.1 = 0
main:
  PORTA.0 = 0     
  PORTA.1 = 1
  delay_ms(1000)        
  PORTA.0 = 1     
  PORTA.1 = 0
  delay_ms(1000)       
  goto main
end.
Detta programmet tycker jag ska fungera, det gör det till hälften också.
LEDen på AN0 lyser hela tiden medans LEDen på AN1 blinkar som den ska.

Någon som vet varför det är såhär?

Sen, vilket språk tycker ni man ska fortsätta med?
Är där några begränsningar med några av språken?

Sen försökte jag göra samma sak (liknande program) i C, men det funkade inte alls, så om någon har några minuter att offra så skulle jag bli mycket tacksam om någon skrev ett sådant program i C.

Har ni några bra länkar till "tutorials" till hur man kommer igång att programmera PIC's så får ni gärna posta dom med (ej google)

Postat: 5 december 2005, 16:47:36
av lgrfbs
Med risk för att bli ideot förklarad, har du kollat alla exempel filerna som följer med mikroBasic, MicroC & mikroPascal?

De vissar mycket utförligt hur syntaxen ska se ut.


Lägger ut en nerklippt del från mitt projekt "Växelknopp" för att visa
hur jag skriver i mikroPascal och det har funkat fint för mig.

Kod: Markera allt

program AD16F88;

{main procedure}
 //******************************************************************************
 // microcontroller : P16F88
 // -CONFIG-
 // [X] CP_OFF    [X] DEBUG_OFF  [X] WRT_ENABLE_OFF,
 // [X]CPD_OFF    [X]LVP_OFF     [X] BODEN_OFF,
 // [X]MCLR_OFF   [X] PWRTE_OFF  [X] WTD_OFF
 // [X] INTRC_IO
 // -CONFIG2-
 // [X] IESO_OFF  [X] FCMEN_OFF
 //******************************************************************************
Var
Intro:byte;

begin
 //Setup
 OSCCON := %11111110; // internal 8mHz osc
 ANSEL := 0;   // just want digital inputs - default is for ADC
 TRISA := 0; // designate gpio as output
 TRISB := 0;
 ADCON1:=0;
 CMCON:=7;     //turns off the comparitors
 For Intro:=1 to 10 do
 Begin
  //-Power on!
  PortA:=$00;
  PortB:=$04;    
  delay_ms(300);
  PortA:=$10;    
  PortB:=$00;    
  delay_ms(300);
  PortA:=$04;    
  PortB:=$00;    
  delay_ms(300);
  PortA:=$40;    
  PortB:=$00;    
  delay_ms(300);
  PortA:=$00;    
  PortB:=$01;    
  delay_ms(300);
  PortA:=$00;    
  PortB:=$20;    
  delay_ms(300);
 End;
End;

Postat: 5 december 2005, 17:54:53
av Greve Hamilton
Någon/några pins på PORTA brukar ju vara inställda på analogt, om man inte skriver något annat. Kolla i databladet om det står något om det.

Sedan, så vill jag bara säga att du borde gå på C med en gång. Jag började med mikrobasic - och visst - det går fort att lära sig, men när programmen blir lite större så känns det bara klumpigt och segt att skriva. Enligt mig, då.


(Notera min fina jul-smiley) :wink:

Postat: 5 december 2005, 18:09:37
av sodjan
>Sen, vilket språk tycker ni man ska fortsätta med?

Fortsätta ? Du menar väll "börja med" ?? :-)
Eller har du programmerat PIC tidigare ?

Personligen tycker jag att du skall börja med assembler
tills du tycker att du kan PIC arkitekturen tillräckligt bra
för att kunna använda ett 3GL språk utan problem. Säg
om 6-12 månader eller så. Men du kanske då
har lärt sig uppsakatta assembler tillräckligt mycket
för att fortsätta med det. En 628A med enbart 2 K words
är inte mycket att köra 3GL på hur som helst, det är lite
skillnad när man kommer upp på PIC18 serien med
upp till 64 K words programminne.

Dessutom, du har massor att lära innan valet av språk blir
speciellt intressant, och det lär man sig enklast med
assembler, anser jag.

Det är även mycket enklare att hitta kodexempel i
assembler, t.ex i "Source Code Library" på www.piclist.com.
http://www.piclist.com/techref/microchip/routines.htm
Kolla gärna där, man hittar det mesta där...

Men låt oss titta på din kod.

Är LEDarna kopplade (via motstånd) till 5V externt ?

Låt oss anta att ditt verktyg översätter "PORTA.0 = 0" med
"BCF PORTA 0". Nu, eftersom du inte har stängt av komparatorerna
så kommer alla läsningar från PORTA.0 att ge "0". D.v.s när du gör

Kod: Markera allt

  PORTA.0 = 1     
  PORTA.1 = 0
så sker följande :
  1. Hela PORTA läses
  2. PORTA.0 sätt till "1"
  3. Hela PORTA skrivs (so far so good...)
  4. Hela PORTA läses (obs att PORTA.0 nu *läses* som "0" !)
  5. PORTA.1 sätt till "0"
  6. Hela PORTA skrivs (d.v.s att nu är både PORTA.0 och PORTA.1 = "0" !)
Kolla exemplet i databladet hur du stänger av komparatorerna.

Det är ett missförstånd att det går snabbare att lära
sig programmera PIC genom att köra C, Pascal eller Basic,
det bara "känns" så. Visst, det går skitsnabbt att få ihop
det första programmet, men ganska snart brukar de flesta
köra fast eftersom de saknar den grundkunskap om
processorerna som man (bäst) får genom att köra assembler
ett tag.

> Är där några begränsningar med några av språken?

Assembler är väll det endra språk som inte har några
inbyggda begränsningar, och där man kan göra
*allt* som den aktuella processorn klarar av.

Få gratis 3GL kommer utan någon slags inbyggd
begränsning. Kolla det med de du har tittat på.
Mikroelektronikas har väll en gräns på 2 K kod i
sina gratis/demo versioner. Sen får man lägga upp
mer eller mindre mycket pengar för att få de obegränsade
versionerna. Helt OK så klart, om man vill göra det, och
dessutom räcker det så länga man inte använder en
processor med mer minne än 628A... :-)

Slutligen, andra kan mycket väl ha andra uppfattningar... :-)