PIC 16F877A input problem

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

Moderators: pedja089, stojke369, [eDo], trax

User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 306
Joined: 14-05-2010, 16:52
Location: Srbija

PIC 16F877A input problem

Post by PRO_MILE »

Pic je 16F877A, prikacio sam na njega dugme i povezao ga kad se pretisne dugme da dobije logicku 1 na porta.0.

Problem je u tome sto on to ne registruje, u programu sam definisao da su svi a portovi izlazni, citao sam po internetu da treba nekako da se stavi da je PORTA digitalni, a ne analogni...


Hvala unapred

Pozz
Maki
Odlično uznapredovao
Odlično uznapredovao
Posts: 766
Joined: 02-07-2012, 12:54

Re: PIC 16F877A input problem

Post by Maki »

Bok!
Pogledaj na ovoj stranici :
http://www.edaboard.com/thread165667.html
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 306
Joined: 14-05-2010, 16:52
Location: Srbija

Re: PIC 16F877A input problem

Post by PRO_MILE »

Moze li neko ko se razume da napise kod, nije mnogo zahtevan a meni ce znaciti mnogo...



Hvala unapred
Pozz
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: PIC 16F877A input problem

Post by Kukinjos »

Stavi kod koji si do sada napisao, i opiši što bi htio napraviti, bit će nam lakše za razmišljat.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 306
Joined: 14-05-2010, 16:52
Location: Srbija

Re: PIC 16F877A input problem

Post by PRO_MILE »

Kukinjos wrote:Stavi kod koji si do sada napisao, i opiši što bi htio napraviti, bit će nam lakše za razmišljat.
PIC: 16F877A

Code: Select all

 

   TRISA = $FF    
   TRISB = $00     

Pocetak:

   If porta.0 = 1 Then pali
   
   portb.0 = 1    
   pause 1000
   
   Goto Pocetak   
   
Pali:

   portb.0 = 0      
   pause 2000
   
   Goto Pocetak   
   
End   


Na portb.0 sam stavio led, ali ne radi... Dugme je prekljuceno preko pull down, sto znaci da kad pretisnem dugme na porta.0 treba da bude logicka 1.

Trazio sam po netu i neki kazu da treba da se prebaci sa analognog na digitalni, ali ne znam kako to ide niti da li je to tacno.


Nadam se da ima pomoci...

Pozdrav!
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: PIC 16F877A input problem

Post by Kukinjos »

Evo, pokušaj ovako:

Code: Select all

   ADCON1 = $C7
   CMCON = $FF
   TRISA = $FF    
   TRISB = $00     

Pocetak:

   If porta.0 = 1 Then pali
   
   portb.0 = 1    
   pause 1000
   
   Goto Pocetak   
   
Pali:

   portb.0 = 0      
   pause 2000
   
   Goto Pocetak   
   
End   
Vjerojatno CMCON = $FF ne treba, ali sve jedno, nek se nađe.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 306
Joined: 14-05-2010, 16:52
Location: Srbija

Re: PIC 16F877A input problem

Post by PRO_MILE »

Izbacuje gresku za CMCON

Symbol not previously defined (CMCON)

Izbacio sam ga pa cu probati, javljam rezultate...





Pozz
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: PIC 16F877A input problem

Post by Kukinjos »

Ne smije ti izbacivat grešku ako si odabrao PIC16F877.
PRO_MILE.JPG
PRO_MILE.JPG (23.47 KiB) Viewed 10312 times
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 306
Joined: 14-05-2010, 16:52
Location: Srbija

Re: PIC 16F877A input problem

Post by PRO_MILE »

Odlicno, radi!!


Imam samo jos jedno pitanje posto sam povezao taj pic sa serial portom, koristim sledeci kod za prepoznavanje u pic-u koji podaci dolaze iz komp.a


Serin PORTC.7, T2400,["F"],D1P,D2P,D3P,D4P

to je za unos u pic


Sledece sto trebaj jeste da sa pic-a posaljem na pc, za to se koristi serout ali nisam siguran kako najbolje treba da se postavi... Meni je potrebno da pic moze da salje brojke pa ako neko moze da mi pomogne kako bi trebao da glasi serout za to?


Pozdrav
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: PIC 16F877A input problem

Post by Kukinjos »

Skoro isto kao i serin:
Serout PORTC.6, T2400,[varijabla]
ovdje su ti objašnjenja:
http://melabs.com/resources/pbcmanual/5/5-32.htm
ili primjeri:
http://www.warburtech.com/products/comp ... serin.pbp/
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 306
Joined: 14-05-2010, 16:52
Location: Srbija

Re: PIC 16F877A input problem

Post by PRO_MILE »

Kad sam ubacio u svoj kod za paljenje ledice i slanje serout kada se pretisne dugme nece da radi, niti se pali led niti dolazi nesto u pc, a kad pc salje podatke onda radi...

Stvarno ne znam u cemu je problem, kod nije koplikovan evo:

Code: Select all

         
         
         include "modedefs.bas"
         
         symbol S0 = PORTC.7   'Port za prijem podataka
         symbol S1 = PORTC.6   'Port za preduju podataka 

         symbol D1 = PORTB.0   'Kanal 1
         symbol D2 = PORTB.1   'Kanal 2
         symbol D3 = PORTB.2   'Kanal 3
         symbol D4 = PORTB.3   'Kanal 4
         symbol D5 = PORTB.4   'Kanal 5
         symbol D6 = PORTB.5   'Kanal 6
         symbol D7 = PORTB.6   'Kanal 7
         symbol D8 = PORTB.7   'Kanal 8
         
         SYMBOL A1 = PORTA.0
        ' Symbol A2 = PORTA.1
         
         
         
          
           
         D1P var byte          'Komande dobijene od PC-a 
         D2P var byte
         D3P var byte
         D4P var byte
         D5P VAR BYTE
         D6P VAR BYTE
         D7P VAR BYTE
         D8P VAR BYTE
         
         A1R var byte
            A1R = 1
         A2R var byte
            A2R = 2
 
                     
         ADCON1 = $C7
         
         TRISC = %10000000
         TRISB = %00000000      'Svi pinovi porta B su izlazni
         
         TRISA = %11111111
           
         PORTB = $00            'Postavi na 0 sve pinove porta B    
           
Glavni:

        

         Serin S0, T2400,["F"],D1P,D2P,D3P,D4P,D5P,D6P,D7P,D8P 'Ceka na prijem od PC racunara komndu

'        komandovanje prvim kanalom                    
     
             If D1P = "1" Then 
                       D1 = 1
                       Serout s1, T9600,["1",10,13]
                     Else  
                       D1 = 0
         EndIf

'        komandovanje trecim kanalom                    

         If D2P = "1" Then 
                        D2 = 1
                        
                       Else
                        D2 = 0
                        
         EndIf

'        komandovanje drugim kanalom                    
 
         If D3P = "1" Then 
                        D3 = 1
                      Else  
                        D3 = 0
         EndIf
         
'        komandovanje cetvrtim kanalom                    

         If D4P = "1" Then 
                         D4 = 1
                       Else  
                         D4 = 0
         EndIf
         
         '        komandovanje petim kanalom                    

         If D5P = "1" Then 
                         D5 = 1
                       Else  
                         D5 = 0
         EndIf
         
         '        komandovanje sestim kanalom                    

         If D6P = "1" Then 
                         D6 = 1
                       Else  
                         D6 = 0
         EndIf
         
         '        komandovanje sedmim kanalom                    

         If D7P = "1" Then 
                         D7 = 1
                       Else  
                         D7 = 0
         EndIf
         
         '        komandovanje osmim kanalom                    

         If D8P = "1" Then 
                         D8 = 1
                       Else  
                         D8 = 0
         EndIf
         
         '        Komanda slanje
         
         IF A1 = 1 then        ' TEST TEST TEST
                        D1 = 1
                        Serout S1,T2400,[A1R]
                      else
                        D1 = 0
                       
         Endif
         
         
      '   If A2 = "1" then
     '                   Serout s1, T2400,[A2R,10]
     '                  else
     '                  
     '    endif
           
         
         
         
    
         Goto Glavni
         

        
         End
                                   



Gde gresim?
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: PIC 16F877A input problem

Post by Kukinjos »

Serin S0, T2400, .....
...
...
Serout s1, T9600, ....

Zašto ti je baudrate različit? Vjerojatno zato ti ne radi serout. Popravi to, pa idemo dalje.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 306
Joined: 14-05-2010, 16:52
Location: Srbija

Re: PIC 16F877A input problem

Post by PRO_MILE »

Kukinjos wrote:Serin S0, T2400, .....
...
...
Serout s1, T9600, ....

Zašto ti je baudrate različit? Vjerojatno zato ti ne radi serout. Popravi to, pa idemo dalje.

Promenio ali i dalje je isto, mislim da je problem u tome sto kad kliknem dugme on uopste nece da upali led sto znaci da ne moze ni serout da izvrsi tu je greska ali nzm kako da je ispravim.
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: PIC 16F877A input problem

Post by Kukinjos »

Ti koristiš "True" za serin, što znači da ne invertiraš podatke sa serijskog porta. Ako si stavio neki interface na serijski port, npr. max232, onda moraš invertirat signal, znači koristit N2400. Drugo, kad šalješ podatke, iz programa se vidi da komunikaciju počinješ s slovom F, a onda 8 podataka ide iza toga. Jel to točno tako radiš? Pokušaj za probu napravit serin i odmah serout, na terminalu odakle šalješ komande ti se moraju ponovit poslana stanja, npr:

Code: Select all

Serin S0, T2400,["F"],D1P,D2P,D3P,D4P,D5P,D6P,D7P,D8P
Serout S1, T2400,[D1P,D2P,D3P,D4P,D5P,D6P,D7P,D8P] 
Idi korak po korak, tako ćeš izbjeći puno grešaka, pa kad riješiš jedan problem tek onda dopiši slijedeći kod.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 306
Joined: 14-05-2010, 16:52
Location: Srbija

Re: PIC 16F877A input problem

Post by PRO_MILE »

Sa max232 je, stavio sam odma ispod serin serout, ali sad kad posaljem np. F10000000 nece ni led da se upali a kamo li da ispise nesto, program za komunikaciju je:

http://code.msdn.microsoft.com/windowsd ... T-fb040fb2
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: PIC 16F877A input problem

Post by Kukinjos »

Ako imaš MAX232, moraš stavit N2400, jer MAX232 invertira signale, kako kod serin, tako i kod serout.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 306
Joined: 14-05-2010, 16:52
Location: Srbija

Re: PIC 16F877A input problem

Post by PRO_MILE »

Kukinjos wrote:Ako imaš MAX232, moraš stavit N2400, jer MAX232 invertira signale, kako kod serin, tako i kod serout.
Ok, za serin sam stavio T i radi, a za serout sam probao oba i nista mada prvo sto treba da resimo jesto dugme koje kad pritisnem nece da radi, onaj gore kod sam ubacio u ovaj moj i nista nece da zasvetli led, jel kad bi zasvetlela led onda bi i serout procitao...
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: PIC 16F877A input problem

Post by Kukinjos »

Previše si opcija uključio u igru, moraš bit strpljiv, probaj za početak radit s običnim terminalom i serin pa serout, i vidjet ide li komunikacija u oba smjera (imaš li echo na terminalu). Kad to riješiš onda dopiši kod za palit i gasit LED.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
PRO_MILE
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 306
Joined: 14-05-2010, 16:52
Location: Srbija

Re: PIC 16F877A input problem

Post by PRO_MILE »

Kukinjos wrote:Previše si opcija uključio u igru, moraš bit strpljiv, probaj za početak radit s običnim terminalom i serin pa serout, i vidjet ide li komunikacija u oba smjera (imaš li echo na terminalu). Kad to riješiš onda dopiši kod za palit i gasit LED.
Imas li skype, posalji mi na PM. Da ti objasnim sta radi tj. dokle sam stigo sa ispitivanjem...
User avatar
Kukinjos
Pravi forumaš
Pravi forumaš
Posts: 1724
Joined: 28-03-2012, 18:01
Location: Split

Re: PIC 16F877A input problem

Post by Kukinjos »

Evo, probaj samo ovo:

Code: Select all

         
         
         include "modedefs.bas"
         
         symbol S0 = PORTC.7   'Port za prijem podataka
         symbol S1 = PORTC.6   'Port za preduju podataka 
        
       
         
          
           
         D1P var byte          'Komande dobijene od PC-a 
         D2P var byte
         D3P var byte
         D4P var byte
         D5P VAR BYTE
         D6P VAR BYTE
         D7P VAR BYTE
         D8P VAR BYTE
         
           
Glavni:

        

         Serin S0, N2400,["F"],D1P,D2P,D3P,D4P,D5P,D6P,D7P,D8P 'Ceka na prijem od PC racunara komndu
         Serout S1, N2400, ["R",D1P,D2P,D3P,D4P,D5P,D6P,D7P,D8P]

         Goto Glavni
         

        
         End
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Post Reply