upravljanje izlazima-primjer

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

upravljanje izlazima-primjer

Post by febo26 »

Drage kolege,

posto sam novi u vodama programiranje molio bih Vas za pomoc.

Trebao bih primjer u picbasicu pro kako upravljati relejom pomocu tipki

Imam tri tipke za ulaz i tri releja na izlaz
tipke su spojene na Port.A a releji su spojeni na Port.B

dok pritisnem tipku 1 portA.1 da mi se upali relej 1 koji je na portB.1 (releji 2 i 3 ugaseni)
dok pritisnem tipku 2 portA.2 da mi se upali relej 2 koji je na portB.2 (relej 1 i 3 ugaseni)
dok pritisnem tipku 3 portA.3 da mi ugasi relej 1i 2 i da je upaljen samo relej3 na portB.3

pozdrav
User avatar
niho
Pravi forumaš
Pravi forumaš
Posts: 1895
Joined: 24-09-2009, 17:26
Location: Brcko, Bosnia and Herzegovina

Re: upravljanje izlazima-primjer

Post by niho »

Procitaj pedjin kurs i ne samo da ces uraditi to sto ti treba nego i nauciti kako da rjesavas i puno slozenije stvari.
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: upravljanje izlazima-primjer

Post by febo26 »

pozdrav ekipi,
nakon par dana kuckanja i experimentiranja uspio sam skuziti kako se upravlja ulazima i izlazima na PIC-u i pri tome jos da dobijem ispis na LCD ekranu koji je izlaz aktivan.
Sad kada to znam muci me kako upravljati relejima pomocu daljinskog upravljaca.Trazim po netu primjere za dekodiranje RC5 koda ali bezuspjesno.ili su pisani u C-u ili su za serijsku kominikaciju s racunalom.
Kako dekodirati rc5 kod i da dok stisnm tipku jedan na daljinskom on ukljuci relej 1.
Imam i knjigu od Voje Milanovica i tamo je opisam primjer ali ne radi.
User avatar
gurko
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 241
Joined: 18-03-2011, 19:28
Location: Srednja BiH

Re: upravljanje izlazima-primjer

Post by gurko »

Prelisataj malo po ovom forumu. Mislim da sam dao u jednom postu rutinu (ali u Cu) za prijem RC5 koda sa daljinskog. U principu rutina nije komplikovana i moze se jednostvno prebaciti u picbasic. :wink:
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: upravljanje izlazima-primjer

Post by pedja089 »

Ima i u basicu na ovom forumu...
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: upravljanje izlazima-primjer

Post by febo26 »

pozdrav,
da se zahvalim ekipi s foruma na pomoci i na prikazanim primjerima.Uspio sam napisati prvi program u zivotu i da radi.Ima jednu malu manu ali me to ne dira previse.Znaci radi se o kontroli za predpojacalo-znam da na internetu ima bezbroj gotovih primjera ali evo da malo spojim ucenje s korisnim.Pomocu daljinskog ili 8 tipki na kucistu uredjaja preklapam 8 ulaznih releja,mute rele,i power relej te pokrecem motorizirani alps potenciometar pomocu H-mosta.

Evo i primjer coda:
'

Code: Select all

****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 20.2.2012                                         *
'*  Version : 1.0                                               *
'*  Notes   : PROGRAM RADI                                                 *
'*          :                                                   *
'****************************************************************
DEFINE BUTTON_PAUSE 50
define osc 4
DEFINE LCD_BITS 4      ' LCD broj Bita na liniji 4 ili 8
DEFINE LCD_DREG PORTB  ' LCD data port
DEFINE LCD_DBIT 4      ' LCD pocetni bit podataka 0 ili 4(od kojeg pina na mikrokontroleru pocinje 0 bit podataka)
DEFINE LCD_RSREG PORTB ' LCD registar select port
DEFINE LCD_RSBIT 2     ' LCD registar select bit (na koji pin na mikrokontroleru je povezan RS bit)
DEFINE LCD_EREG PORTB  ' LCD enable port
DEFINE LCD_EBIT 3      ' LCD enable bit(na koji pin na mikrokontroleru je povezan E bit)
DEFINE LCD_LINES 2

  
   TRISA = $1F     'Postavi sve pinove porta A kao ulazne
   TRISB = $00    'Postavi sve pinove porta B kao izlazne 
   TRISC = $ff    'Postavi sve pinove porta C kao ulazne 
   TRISD = $00    'Postavi sve pinove porta D kao izlazne 
   TRISE = $00    'Postavi sve pinove porta E kao izlazne
   ADCON1 = 7      'disable A/d work digital 
   portB.1 =0
   portb.0 =0
   portb.1 =0
   porte.0=0
   porte.1=0
   portd = %00000000
   portc = %00000000
 
   
 
PAUSE 300 '  pocetni text
lcdout $fe,1 
lcdout $fe,$80,"DALJINSKE KOMANDE"
PAUSE  1000



   
 
;Normal aliases (constants)
Glitch con 52 ;Max 255: Reduction glitches
SYMBOL LED_Time = 500 ;mSec: Error LED's burning time
Ok con 50 ;Max 255: Controltime of the RC5 code is received ok

;Port aliases
IR_Receiver var PORTA.4 ;TSOP1736

;BYTE
Command VAR BYTE
CommandOld VAR BYTE
Systeem VAR BYTE
SysteemOld VAR BYTE
BD1 VAR BYTE ;Byte Dummy
;BIT
ToggBit VAR BIT
Value VAR BIT
' ID1 VAR BIT ;bIt Dummy
CLEAR


pocetak:                   'prva rutina za paljenje
if porta.4 = 0 then start
IF porta.0 = 1 then  lblpower
GOTO pocetak


ukljucen:                      'selector ulaza petlja
IF porta.0 = 1 then  lblpower
if porta.4 = 0 then start
if portc.0 = 1 then  lbl1
if portc.1 = 1 then  lbl2     
if portc.2 = 1 then  lbl3
if portc.3 = 1 then  lbl4
if portc.4 = 1 then  lbl5
if portc.5 = 1 then  lbl6
if portc.6 = 1 then  lbl7
if portc.7 = 1 then  lbl8
goto ukljucen




Start:                   'citanje daljinsko upravljaca rc-5 code
BD1 = 0
WHILE IR_Receiver = 1
WEND ;Wait until a IR-signal is received

WHILE IR_Receiver = 0
if BD1 < Glitch then BD1 =bd1+1 'Glitch val 52
WEND
CommandOld = Command ;Save old values for repair in case of a error
SysteemOld = Systeem

pauseUS 500 ;200 - 825; Avoid RC5 header

GOSUB BitOphalen
Command.6 = Value ^ 1 ;Extended bit

GOSUB BitOphalen
ToggBit = Value

GOSUB BitOphalen
Systeem.4 = Value

GOSUB BitOphalen
Systeem.3 = Value

GOSUB BitOphalen
Systeem.2 = Value

GOSUB BitOphalen
Systeem.1 = Value

GOSUB BitOphalen
Systeem.0 = Value

GOSUB BitOphalen
Command.5 = Value

GOSUB BitOphalen
Command.4 = Value

GOSUB BitOphalen
Command.3 = Value

GOSUB BitOphalen
Command.2 = Value

GOSUB BitOphalen
Command.1 = Value

GOSUB BitOphalen
Command.0 = Value

pause 100

IF command = 1 and portb.1 =1 THEN LBL1
IF command = 2 and portb.1 =1 THEN LBL2
IF COMMAND = 3 and portb.1 =1 THEN LBL3
IF COMMAND = 4 and portb.1 =1 THEN LBL4
IF COMMAND = 5 and portb.1 =1 THEN LBL5
IF COMMAND = 6 and portb.1 =1 THEN LBL6
IF COMMAND = 7 and portb.1 =1 THEN LBL7
IF COMMAND = 8 and portb.1 =1 THEN LBL8
if command = 12 then lblpower
if command = 16 and portb.1 =1  then LBLvolumeup
if command = 17 and portb.1 =1  then LBLvolumedown

if command = 13 and portb.1 =1  then 
             toggle portb.0
             endif
goto start


 ;Subroutines
BitOphalen:
Value = IR_Receiver ;Make value 0 or 1 dependent from received IR-code
BD1 = 0
WHILE IR_Receiver = Value AND BD1 < Ok;Level must change within time 'Ok'
BD1 =bd1+1
WEND

IF Ok = BD1 THEN ErrorReceive ;No level-change whitin the 'Ok' time
pauseUS 1100 ;950 - 1600
RETURN


ErrorReceive:
Command = CommandOld ;Repair Command and Systeem
Systeem = SysteemOld
GOTO Start


'LABELE ZA RAD
   
LBL1:
    PAUSE 100
    lcdout $fe,1
    lcdout $fe,$80,"SELECTED INPUT:"
    lcdout $fe,$C0+4,"TUNER"
    portd = %00000001            'ukljuci relej 1
    GOTO ukljucen
LBL2:
    PAUSE 100
    lcdout $fe,1 
    lcdout $fe,$80,"SELECTED INPUT:"
    lcdout $fe,$C0+6, "CD"
    portd = %00000010           'ukljuci relej 2
    GOTO ukljucen
LBL3:
    PAUSE 100
    lcdout $fe,1 
    lcdout $fe,$80,"SELECTED INPUT:"    
    lcdout $fe,$C0+5, "DVD"
    portd = %00000100          'ukljuci relej 3
    GOTO ukljucen
LBL4:
    PAUSE 100
    lcdout $fe,1 
    lcdout $fe,$80,"SELECTED INPUT:"
    lcdout $fe,$C0+5, "SAT"
    portd = %00001000            'ukljuci relej 4
    GOTO ukljucen
LBL5:
    PAUSE 100
    lcdout $fe,1 
    lcdout $fe,$80,"SELECTED INPUT:"
    lcdout $fe,$C0+6, "TV"
    portd = %00010000            'ukljuci relej 5
    GOTO ukljucen
LBL6:
    PAUSE 100
    lcdout $fe,1
    lcdout $fe,$80,"SELECTED INPUT:" 
    lcdout $fe,$C0+5, "AUX"
    portd = %00100000           'ukljuci relej 6
    GOTO ukljucen
LBL7:
    PAUSE 100                            
    lcdout $fe,1 
    lcdout $fe,$80,"SELECTED INPUT:"
    lcdout $fe,$C0+6, "MD"
    portd = %01000000           'ukljuci relej 7
    GOTO ukljucen
LBL8:
    PAUSE 100
    lcdout $fe,1
    lcdout $fe,$80,"SELECTED INPUT:" 
    lcdout $fe,$C0+5, "DAC"
    portd = %10000000          'ukljuci relej 8
    GOTO ukljucen

LBLpower:
    TOGGLE PORTB.0
    if portb.0 = 1 then LBLpoweron
    lcdout $fe,1 
    lcdout $fe,$80+4,"POWER OFF"
    portd = %00000000
    portb.1 = 0
    pAUSE 300
    GOTO POCETAK
    
LBLpoweron:
     lcdout $fe,1 
     lcdout $fe,$80+4,"POWER ON"
     portb.0 = 1
     portb.1 = 1
     pause 300
     goto lbl1
     
LBLvolumeup:
     porte.0 = 1
     pause 100
     porte.0=0
     goto ukljucen
     
LBLvolumedown:    
     porte.1 = 1
     pause 100
     porte.1=0
     goto ukljucen
    
end
Malo je amaterski napisan vjerojatno ima i jednostavnije rjesenje,dio koda za dekodiranje RC-5 koda skinut je s http://www.picbasic.co.uk/forum/forum.php

pozdrav
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: upravljanje izlazima-primjer

Post by pedja089 »

Svaka cast, ali ledeci put ubaci kod izmedju tagova code, imas gore dugme...
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: upravljanje izlazima-primjer

Post by febo26 »

Ok,za ubuduce cu zapamtit.

imam jedno pitanjece.
u prvom redu lcd mi pise "SELECTED INPUT"
u drugom redu pise " TUNER"
pitanje je sad dok aktiviram MUTE reley dobim poruku u drugom redu ovog oblika "TUNER" "MUTE"
i dok deaktiviram MUTE relej ostane mi poruka MUTE, na koji nacin obrisati taj mute tj.polj 13,14,15,16 na LCD displeju.

pozdrav
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: upravljanje izlazima-primjer

Post by pedja089 »

LCDOUT $FE,$CO+broj polja," "
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: upravljanje izlazima-primjer

Post by febo26 »

ovo je mali brojac koji treba da broji dok se pritisne tipka prema gore ili prema dolje.
brojanje krece od 50 i sve radi super,jedino dok idem u minus brojanje i dodjem do 10 onda mi zadnjh 9 znamenaka prikaziva umjesto 9 prikaze 90,umjesto 8 prikaze 80 itd do nule.kako rijesiti da prikaziva samo 9,8,7,6,5,4,3,2,1.Kako izbaciti tu nulu




Code: Select all

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 25.2.2012                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************



define osc 4
DEFINE LCD_BITS 4      ' LCD broj Bita na liniji 4 ili 8
DEFINE LCD_DREG PORTB  ' LCD data port
DEFINE LCD_DBIT 4      ' LCD pocetni bit podataka 0 ili 4(od kojeg pina na mikrokontroleru pocinje 0 bit podataka)
DEFINE LCD_RSREG PORTB ' LCD registar select port
DEFINE LCD_RSBIT 2     ' LCD registar select bit (na koji pin na mikrokontroleru je povezan RS bit)
DEFINE LCD_EREG PORTB  ' LCD enable port
DEFINE LCD_EBIT 3      ' LCD enable bit(na koji pin na mikrokontroleru je povezan E bit)
DEFINE LCD_LINES 2

   TRISA = $1F     'Postavi sve pinove porta A kao ulazne
   TRISB = $00    'Postavi sve pinove porta B kao izlazne 
   TRISC = $ff    'Postavi sve pinove porta C kao ulazne 
   TRISD = $00    'Postavi sve pinove porta D kao izlazne 
   TRISE = $00    'Postavi sve pinove porta E kao izlazne
   ADCON1 = 7      'disable A/d work digital 
   
pause 500
 
r var byte
r=50 
pocetak:
IF PORTa.0=1 THEN
R=R+1
IF R=100 THEN R=99
ENDIF
 

IF PORTa.1=1 THEN
 R=R-1
 IF R=0 THEN R=1
 endif
 
LCDOut $fe,2,"brojim: ",dec r
 pause 200
goto pocetak
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: upravljanje izlazima-primjer

Post by febo26 »

rijeseno,nisam stavio naredbu za brisanje displaja pa je ostajala 0


LCDOUT $FE,1
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: upravljanje izlazima-primjer

Post by pedja089 »

lcdout $fe,dec1/2/3/itd, ili dec r," "
Post Reply