Nybörjar problem med pic16f627 på k8048

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Cryptomaster
Inlägg: 593
Blev medlem: 17 december 2005, 02:23:20
Skype: crypto-master
Ort: Nyköping

Nybörjar problem med pic16f627 på k8048

Inlägg av Cryptomaster »

Hej allihopa.
Jag har nyligen börjar med lite smått med pic:ar och införskaffat en k8048 av min lokala velleman ÅF. Nu har jag dock två frågor som jag hoppas kunna få svar på här. Har letat igenom forumet, står mycket vist, men tyvärr inget som kan hjälpa mig.
Jag använder Pic Basic Pro för att skriva programmen i.

Nu är det så att jag har försökt skriva ett program som skall utnyttja 6st lysdioder och 2st knappar. Alla dom finns på k8048:an.
Jag har tänkt följande:
När man sätter igång picen så är allt släckt. Men när man trycker ner t ex SW1 så skall alla 6 lampor börja blinka morse koden för SOS.

Mina frågor då till koden nedan:
1. När jag skall köra den på picen så är allt stendött, reagerar inte på knapptryckningar alls. Men om jag kör en liknande kod, ett exempel som följde med när jag köpte den. Så funkar knapparna som dom skall.

2. Finns det nått lättare sätt att få alla lysdioder att tändas, utan att skriva dom en i taget:
High portb.0
High portb.1
osv....

Tacksam för svar


Koden:

Kod: Markera allt

define osc 4 
input PORTA.0 
INPUT PORTA.1

SW1     VAR     PORTA.0
SW2     VAR     PORTA.1

main:
   IF SW1 THEN morseloop
   IF SW2 THEN blinkningar
   GoTo main
   
morseloop:
    HIGH PORTB.0     'Början av 3 korta
   High PORTB.1
   HIGH PORTB.2
   hIGH PORTB.3
   HIGH PORTB.4
   HIGH PORTB.5
   PAUSE 200
   LOW PORTB.0
   LOW PORTB.1
   LOW PORTB.2
   LOW PORTB.3
   LOW PORTB.4
   LOW PORTB.5
   PAUSE 200
   HIGH PORTB.0
   High PORTB.1
   HIGH PORTB.2
   hIGH PORTB.3
   HIGH PORTB.4
   HIGH PORTB.5
   PAUSE 200
   LOW PORTB.0
   LOW PORTB.1
   LOW PORTB.2
   LOW PORTB.3
   LOW PORTB.4
   LOW PORTB.5
   Low PORTB.2
   PAUSE 200
   HIGH PORTB.0
   High PORTB.1
   HIGH PORTB.2
   hIGH PORTB.3
   HIGH PORTB.4
   HIGH PORTB.5
   High PORTB.3
   PAUSE 200
   LOW PORTB.0
   LOW PORTB.1
   LOW PORTB.2
   LOW PORTB.3
   LOW PORTB.4
   LOW PORTB.5
   Low PORTB.2
   Low PORTB.3      'Slut av 3 korta 
   Pause 200
   HIGH PORTB.0     'Början av 3 långa
   High PORTB.1
   HIGH PORTB.2
   hIGH PORTB.3
   HIGH PORTB.4
   HIGH PORTB.5
   PAUSE 1000
   LOW PORTB.0
   LOW PORTB.1
   LOW PORTB.2
   LOW PORTB.3
   LOW PORTB.4
   LOW PORTB.5
   PAUSE 1000
   HIGH PORTB.0
   High PORTB.1
   HIGH PORTB.2
   hIGH PORTB.3
   HIGH PORTB.4
   HIGH PORTB.5
   PAUSE 1000
   LOW PORTB.0
   LOW PORTB.1
   LOW PORTB.2
   LOW PORTB.3
   LOW PORTB.4
   LOW PORTB.5
   Low PORTB.2
   PAUSE 1000
   HIGH PORTB.0
   High PORTB.1
   HIGH PORTB.2
   hIGH PORTB.3
   HIGH PORTB.4
   HIGH PORTB.5
   High PORTB.3
   PAUSE 1000
   LOW PORTB.0
   LOW PORTB.1
   LOW PORTB.2
   LOW PORTB.3
   LOW PORTB.4
   LOW PORTB.5
   Low PORTB.2
   Low PORTB.3      'Slutet av 3 långa
   Pause 200
   GoTo morseloop   'Loopar om koden igen i oändlighet
   
blinkningar:
    High PORTB.0   'Tänder lysdiod 1  
    PAUSE 200      'Väntar 0,2 s 
    LOW PORTB.0    'Släcker lysdiod 1
    HIGH PORTB.5   'Tänder lysdiod 6
    PAUSE 200      'Väntar 0,2 s
    LOW PORTB.5    'Släcker lysdiod 6
    HIGH PORTB.3
    PAUSE 200
    LOW PORTB.3
    HIGH PORTB.1
    PAUSE 200
    LOW PORTB.1
    HIGH PORTB.4
    PAUSE 200
    LOW PORTB.4
    HIGH PORTB.2
    PAUSE 200
    LOW PORTB.2
    GOTO blinkningar 'Loopar stycket med blinkningar
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

Inlägg av mullemeck »

Hej!

Tycker koden för knapparna borde funka.

Angående tända lysdioderna så finns det ett mycket enklare sätt.
man kan skriva t.ex såhär.

Kod: Markera allt

Output PORTB
PORTB = 0b00111111  'Tänder portb
PORTB = 0    'släcker hela portb
Då kommer de tändas.. inte stensäker dock om man kan köra en Output för hela porten åt gången men testa..
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Inlägg av Kaggen »

cryptomaster: kolla så att du *inte* har watchdog timer *på* i konfigurationsordet. Vet inte hur man gör det i Pic Basic, men det står nog nånstans.
Cryptomaster
Inlägg: 593
Blev medlem: 17 december 2005, 02:23:20
Skype: crypto-master
Ort: Nyköping

Inlägg av Cryptomaster »

Tack för svaren, dock har jag inte fått någon av dom att funka. :oops:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Men om jag kör en liknande kod,

En som också är skriven i PicBasic Pro ?
I så fall är det väll bara att jämföra och se vad du saknar i din kod.

En sak *jag* saknar är avstängning av komparatorerna.
Har du läst delen om PORTx i databladet ?
Du har väll läst igenom *hela* databladet hoppas jag ! Ett par gånger...

Din kod ligger alltså och väntar på att en av knapparna skall tryckas ner.
Sedan ligger den i en av de två looparna där den "fastnar".
Är det avsikten ?
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Inlägg av Kaggen »

cryptomaster: Använder du demo-versionen av Pic Basic Pro?
Cryptomaster
Inlägg: 593
Blev medlem: 17 december 2005, 02:23:20
Skype: crypto-master
Ort: Nyköping

Inlägg av Cryptomaster »

Nope, har pic basic 2.46. Ej demo.

Jag har läst mycket i databladet, men fattat ca hälften av det.
Det vore snällt om du kunde göra det sodjan, så kan vi jämföra vad som saknas.
Komparatorn har jag inte förstått riktigt vad den gör/skall göra.
Men jag har kollat på massa exempel och jag tycker verkligen att detta skall funka. Men picen delar inte min tanke dock.

Avsikten är att:

Den ligger och loopar och väntar på att en knapp skall tryckas ned.
När knappen är nertryck skall den hoppa vidare till en av dom två looparna och bli kvar där.
ristomemo
Inlägg: 1028
Blev medlem: 29 mars 2004, 14:12:18

Inlägg av ristomemo »

Ett tips när su ska börja lära dig. Börja så enkelt som möjligt och bygg på allt efter som.
ex.
steg 1. få en LED att lysa
steg 2. få samma LED att blinka
steg 3. slå på blinkningen via en knapp
steg 4. slå av via en annan knapp
steg 5 slå av o på med samma knapp

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

Inlägg av sodjan »

> Jag har läst mycket i databladet, men fattat ca hälften av det.

OK, alltid något... :-)

> Det vore snällt om du kunde göra det sodjan, så kan vi jämföra vad som saknas.

Göra vadå ??

> Komparatorn har jag inte förstått riktigt vad den gör/skall göra.

Spelar ingen roll, det enda du behöver veta är att du skall stänga av dom.
Se databaldet !!! Det beskrivs på första sidan i kapitlet om PORTA.
Det finns även kodexempel där.

> jag tycker verkligen att detta skall funka.

Det gör det *inte*. Du kan inte använda PORTA som digitala ingångar
innan komparatorerna är avstängda. Nämnde jag databladet ? :-) :-)

Kolla det program som du sa fungerade, stänger de inte av
komparatorerna där ?
Cryptomaster
Inlägg: 593
Blev medlem: 17 december 2005, 02:23:20
Skype: crypto-master
Ort: Nyköping

Inlägg av Cryptomaster »

>Göra vadå ??
Ursäkta, mig jag tolka förra svaret fel.

Jag har letat i exemplet, dock är exemplet skrivet i asm och jag har lite svårt för att tolka det men här är en misstänkt rad:

Kod: Markera allt

__CONFIG        _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC
Frågan är då vad dess motsvarighet i picbasic är.

Om du har lust kanske du kunde skriva, ungefär vad en komparator gör, vad den fyller för funktion när den används. Kanske skulle vara bra att veta i framtiden ?

Edit;
Eller vänta, nu hitta jag en extremt misstänkt rad i exemplet:

Kod: Markera allt

MOVLW	B'00000111'	;Disable Comparator module's
Frågan är då, vad är dess motsvarighet i pic basic :)
Användarvisningsbild
LaRdA
EF Sponsor
Inlägg: 3766
Blev medlem: 9 september 2003, 14:10:46
Ort: Jämtland

Inlägg av LaRdA »

Är inte säker men jag tror att du kan skriva.

Kod: Markera allt

CMCON = 7
EDIT:
Kollade upp det och det verkar stämma.
Using the Port A comparator pins for normal I/O.

The lower 3-bits (CM2, CM1 and CM0) of the CMCON register control the comparator MODE. Out of eight possible modes, a value of "7" loaded into CMCON turns the comparators OFF, and allows all of Port A to function as normal digital I/O.

Writing a value of 7 (binary 00000111) to CMCON turns OFF the comparators. Using PicBasic Pro, you simply add the following line of code to the beginning of your program to turn OFF the comparators, and use these pins as normal digital I/O-pins:

CMCON = 7

Using assembly language, turning OFF the comparator module can be accomplished by:

MOVLW 0x07 ; Load 7 into W register
MOVWF CMCON ; CMCON = contents of W register 7h

Port A.0, A.1, A.2, and A.3 will now operate as normal I/O-pins with comparators turned OFF.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Var kollade du upp det ? I manualen till PicBasic Pro ?

Jag vet inte vad motsvarigheten till " __CONFIG" är i PicBasic,
men leta i manueln efter "config settings", "config fuses", "config bits"
eller något liknande. Sen måste du naturligtsvis gå igenom de olika
config inställningarna så att de är vad du vill ha (och vad hårdvaran vill ha).
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Inlägg av Kaggen »

Här står lite om konfigurations-ordet.

http://www.microengineeringlabs.com/res ... 7_0.htm#72

Konfigurations ordet står alltså i *.INC filerna för respektive processortyp som ligger i Pic Basics hemkatalog nånstans. Det står också att watchdog timer är på default.

Cryptomaster: har du verkligen kollat att watchdogtimern är avslagen?
Cryptomaster
Inlägg: 593
Blev medlem: 17 december 2005, 02:23:20
Skype: crypto-master
Ort: Nyköping

Inlägg av Cryptomaster »

Nu löste det sig!
Jag la till CMCON = 7 precis i början och då funka allt som förväntat.
Stort tack till alla som hjälpte mig med det här.

Koden vart då så här:
Enda nackdelen är väll att det vart väldigt lång kod då jag tänder lysdioderna en för en.

Kod: Markera allt

define osc 4
CMCON = 7 
input PORTA.0 
INPUT PORTA.1

SW1     VAR     PORTA.0
SW2     VAR     PORTA.1

main:
   IF SW1 THEN morseloop
   IF SW2 THEN blinkningar
   GoTo main
   
morseloop:
    HIGH PORTB.0     'Början av 3 korta
   High PORTB.1
   HIGH PORTB.2
   hIGH PORTB.3
   HIGH PORTB.4
   HIGH PORTB.5
   PAUSE 200
   LOW PORTB.0
   LOW PORTB.1
   LOW PORTB.2
   LOW PORTB.3
   LOW PORTB.4
   LOW PORTB.5
   PAUSE 200
   HIGH PORTB.0
   High PORTB.1
   HIGH PORTB.2
   hIGH PORTB.3
   HIGH PORTB.4
   HIGH PORTB.5
   PAUSE 200
   LOW PORTB.0
   LOW PORTB.1
   LOW PORTB.2
   LOW PORTB.3
   LOW PORTB.4
   LOW PORTB.5
   Low PORTB.2
   PAUSE 200
   HIGH PORTB.0
   High PORTB.1
   HIGH PORTB.2
   hIGH PORTB.3
   HIGH PORTB.4
   HIGH PORTB.5
   High PORTB.3
   PAUSE 200
   LOW PORTB.0
   LOW PORTB.1
   LOW PORTB.2
   LOW PORTB.3
   LOW PORTB.4
   LOW PORTB.5
   Low PORTB.2
   Low PORTB.3      'Slut av 3 korta 
   Pause 200
   HIGH PORTB.0     'Början av 3 långa
   High PORTB.1
   HIGH PORTB.2
   hIGH PORTB.3
   HIGH PORTB.4
   HIGH PORTB.5
   PAUSE 1000
   LOW PORTB.0
   LOW PORTB.1
   LOW PORTB.2
   LOW PORTB.3
   LOW PORTB.4
   LOW PORTB.5
   PAUSE 1000
   HIGH PORTB.0
   High PORTB.1
   HIGH PORTB.2
   hIGH PORTB.3
   HIGH PORTB.4
   HIGH PORTB.5
   PAUSE 1000
   LOW PORTB.0
   LOW PORTB.1
   LOW PORTB.2
   LOW PORTB.3
   LOW PORTB.4
   LOW PORTB.5
   Low PORTB.2
   PAUSE 1000
   HIGH PORTB.0
   High PORTB.1
   HIGH PORTB.2
   hIGH PORTB.3
   HIGH PORTB.4
   HIGH PORTB.5
   High PORTB.3
   PAUSE 1000
   LOW PORTB.0
   LOW PORTB.1
   LOW PORTB.2
   LOW PORTB.3
   LOW PORTB.4
   LOW PORTB.5
   Low PORTB.2
   Low PORTB.3      'Slutet av 3 långa
   Pause 200
   GoTo morseloop   'Loopar om koden igen i oändlighet
   
blinkningar:
    High PORTB.0   'Tänder lysdiod 1  
    PAUSE 200      'Väntar 0,2 s 
    LOW PORTB.0    'Släcker lysdiod 1
    HIGH PORTB.5   'Tänder lysdiod 6
    PAUSE 200      'Väntar 0,2 s
    LOW PORTB.5    'Släcker lysdiod 6
    HIGH PORTB.3
    PAUSE 200
    LOW PORTB.3
    HIGH PORTB.1
    PAUSE 200
    LOW PORTB.1
    HIGH PORTB.4
    PAUSE 200
    LOW PORTB.4
    HIGH PORTB.2
    PAUSE 200
    LOW PORTB.2
    GOTO blinkningar 'Loopar stycket med blinkningar

Användarvisningsbild
tecno
Inlägg: 27252
Blev medlem: 6 september 2004, 17:34:45
Skype: tecnobs
Ort: Sparreholm, Södermanland N 59° 4.134', E 16° 49.743'
Kontakt:

Inlägg av tecno »

Du har ett problem dock om du skall skicka SOS.

Pausen mellan SOS och SOS saknas i din kod.
Skriv svar