ako neko ima strpljenja da mi objasni........ :)

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

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
slaki84
Posts: 17
Joined: 31-07-2009, 19:59

ako neko ima strpljenja da mi objasni........ :)

Post by slaki84 »

mucim se 5 dana i trazim pomoc al google mi i nenudi nista korisno....
kako da spojim 2-3-4 kom 7segmentna displeja na recimo pic 16f84 mislim znam kako da spojim al me interesuje kako da isprogramiram da na njima bude razlicit broj znaci mene interesuje multiplexiranje signala na PORTA jer su mi tu spojene zajednicke anode-katode
pokusavam nesto da naucim al mi neide od ruke ..... :(
User avatar
sindja1204
Odlično uznapredovao
Odlično uznapredovao
Posts: 792
Joined: 03-05-2009, 11:57
Location: Beograd

Re: ako neko ima strpljenja da mi objasni........ :)

Post by sindja1204 »

Za pocetak pogledaj ovaj pedjin kurs...
http://www.elektronika.ba/forum/viewtop ... 9&start=30" onclick="window.open(this.href);return false;
VFDisplay
Odlično uznapredovao
Odlično uznapredovao
Posts: 515
Joined: 01-08-2009, 20:18

Re: ako neko ima strpljenja da mi objasni........ :)

Post by VFDisplay »

evo da ne mora čitati sve ja ću mu pokušatiu objasniti
dakle bit ti je svega toga da su ti u dislplay-u spojeni svi segmenti zajedno (osim zajedničkih katoda/andoda). i recimo da želiš ispisati broj 123 na display i da su ti zajedničke anode / katode spojene ovako: prvi disp. na PORTA.0, drugi na PORTA.1, a treći na PORTA.2 (pod disp. mislim na znamenke). i sada prvo pustiš struju kroz porta.0 te ispišeš na displayu broj 1 zadim napraviš kraktu zadršku (recimo 5ms),onda prekineš struju kroz porta.0,pustiš stkuju kroz porta.1,ispišeš broj 2,napraviš zadršku,prekineš struju kroz porta.1,pustiš struju kroz porta.2,ispišeš broj 3,napraviš zadršku,prekineš struju kroz porta.0

i da nezaboravi ovo:
ako ti je display sa zajedničkom katodom onda kad želiš upaliti taj disp (tj.pustiti struju kroz njega) tada ti mora biti porta.0 = 0 uprotivnom,ako ti je display sa zajedničkom anodom ide normalno porta.0 = 1
slaki84
Posts: 17
Joined: 31-07-2009, 19:59

Re: ako neko ima strpljenja da mi objasni........ :)

Post by slaki84 »

e to mene interesuje kojom komandom da dobijem da se na porta smjenjuju stanja
VFDisplay
Odlično uznapredovao
Odlično uznapredovao
Posts: 515
Joined: 01-08-2009, 20:18

Re: ako neko ima strpljenja da mi objasni........ :)

Post by VFDisplay »

to ti ovisi o programskom jeziku. ako koristiš PicBasicPRO onda možeš na par načina:
1. sa komandom portx.x = x (recimo portb.1 = 0) - kažeš da li će stanje na pinu biti logička nula ili jedinica
2. trisa/b/c/d/e = %XXXXXXXX (recimo trisb = %10100100)-s ovom komandom kontroliraš cijeli port što znači kontroliraš cijeli portb a ovi x-evi su ti zasebni izlazi (prvi ti je, ako se nevaram,portb.7,i ako želiš da ti on bude na logičkoj jedan onda upisuješ 1 u suprotonm upisuješ nulu
3. komanda toggle porta/b/c/d/e.x - mijenja stanje na pinu, ako je recimo prijašnje stanje na portu bilo jedan nakon korištenja ove komande biti će nula (recimo TOGGLE portb.1)
4. High/low Porta/b/c/d/e.x (recimo High porta.0) - tu je sve jasno,kažeš da li će stanje na pinu biti logička visoka (tj. jedinica) ili niska (tj.nula)

naravno na početku programa obavezno portove koji se koriste kao izlazni definirati (npr. output portb.0). Ali pazi! Ako ti je katoda ledice spojena na port onda moraš ga nazvati ulaznim a to činiš na sljedeći način Input portx.x (recimo portb.0)

nadam se da sam ti pomogao s ovime
User avatar
niho
Pravi forumaš
Pravi forumaš
Posts: 1895
Joined: 24-09-2009, 17:26
Location: Brcko, Bosnia and Herzegovina

Re: ako neko ima strpljenja da mi objasni........ :)

Post by niho »

Ipak ti je moja preporuka da procitas (i ako je moguce odradis predvidjene vjezbe) iz Pedjinog kursa, vidjet ces da ima jako dobrih stvari a i puno tezih problema koje ces vrlo brzo shvatiti. To ce ti trebati ako budes mislio da se bavis mikrokontrolerima. Jako dobar kurs i obuhvata sustinu rada. Odlicna osnova za dalju nadgradnju.
User avatar
Elektronicar
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 467
Joined: 19-01-2008, 17:05
Location: Balkan

Re: ako neko ima strpljenja da mi objasni........ :)

Post by Elektronicar »

Evo ti gotov primer pisan u mikrobasic-u imas na njihovom sajtu jos gomilu drugih primera.

Code: Select all

' *
' * Project name:
'     Display7seg (Advanced 7Seg. display example)
' * Copyright:
'     (c) mikroElektronika, 2008
' * Revision History:
'     20080225:
'       - initial release.
' * Description:
'     This code demonstrates  displaying number on four 7-segment display (common
'     cathode), in multiplex mode. All 7-segment displays are connected to PORTD
'     (RD0..RD7, segment A to RD0, segment B to RD1, etc) with refresh via pins
'     RA0..RA3 on PORTA. Number is on for 1 second.
' * Test configuration:
'     MCU:             PIC16F887
'     Dev.Board:       EasyPIC5
'     Oscillator:      HS, 08.0000 MHz
'     Ext. Modules:    -
'     SW:              mikroBasic v7.1
' * NOTES:
'     - make sure you switch on DIS0 - DIS3 switches on SW6. (board specific)
' *

program Display7seg

dim shifter, portd_index as byte
    digit, number as word
    portd_array as word[4]
 
sub function mask(dim num as Word) as Word
 select case num
     case 0  result = $3F
     case 1  result = $06
     case 2  result = $5B
     case 3  result = $4F
     case 4  result = $66
     case 5  result = $6D
     case 6  result = $7D
     case 7  result = $07
     case 8  result = $7F
     case 9  result = $6F
   end select       'case end
end sub

sub procedure interrupt
  PORTA = 0                             ' Turn off all 7seg displays
  PORTD = portd_array[portd_index]      ' bring appropriate value to PORTD
  PORTA = shifter                       ' turn on appropriate 7seg. display

  ' move shifter to next digit
  shifter = shifter << 1
  if (shifter > 8) then
    shifter = 1
  end if
  ' increment portd_index
  Inc(portd_index)
  if (portd_index > 3) then
    portd_index = 0                     ' turn on 1st, turn off 2nd 7seg.
  end if
  TMR0   =   0                          ' reset TIMER0 value
  INTCON = $20                          ' Clear T0IF


end sub

main:
  ANSEL       =    0                    ' Set AN pins to Digital I/O
  ANSELH      =    0
  OPTION_REG  =  $80                    ' Timer0 settings
  digit       =    0
  portd_index =    0
  shifter     =    1
  TMR0        =    0
  INTCON      =  $A0                    ' Enable GIE, T0IE
  PORTA       =    0
  TRISA       =    0                    ' Set PORTA as output
  PORTD       =    0
  TRISD       =    0                    ' Set PORTD as output

  number      =   6789                  ' some initial value
  
  while TRUE
    digit = number / 1000               ' extract thousands digit
    portd_array[3] = mask(digit)        ' and store it to PORTD array
    digit = (number / 100) mod 10       ' extract hundreds digit
    portd_array[2] = mask(digit)        ' and store it to PORTD array
    digit = (number / 10) mod 10        ' extract tens digit
    portd_array[1] = mask(digit)        ' and store it to PORTD array
    digit = number mod 10               ' extract ones digit
    portd_array[0] = mask(digit)        ' and store it to PORTD array

    Delay_ms(1000)                      ' one second delay

    Inc(number)                         ' increment number
    if (number > 9999) then
      number = 0
    end if
   wend                                 ' endless loop
end.
Post Reply