povezivanje petlji

Diskusija o MSP, ARM / LPC, PLC kontrolerima.

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
satsat
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 204
Joined: 30-09-2012, 14:01

povezivanje petlji

Post by satsat »

Pozdrav !
Imam pitanje u vezi petlji što se tiče Bascom-a

Dakle, imam 2 ili više segmenata led diodi

u prvom segmentu moram spojiti 3 led diode da dobijem trčeće svijetlo
to sam zamislio ovako.

Code: Select all

Do 
P1.0 = Not Led                                                'prva dioda
Waitms 25
P1.0 = Led
P1.1 = Not Led                                                'druga dioda
Waitms 25
P1.1 = Led
P1.2 = Not Led                                                'treća dioda
Waitms 25
P1.2 = Led
Loop

dok bi druge tri diode trebao paliti, jednu po jednu i kad se sve tri diode upale, da ostanu tako svijetliti neko vrijeme. to sam zamislio ovako

Code: Select all

Do
P1.3 = Not Led
Wait 2
P1.4 = Not Led
Wait 2
P1.5 = Not Led
Wait 10

P1.3 = Led
P1.4 = Led
P1.5 = Led

loop
e sad pitanje, kako povezati te dvije petlje da rade odjednom, tj da trćeće svijetlo trči dok se ove 3 ledice polako pale ?


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

Re: povezivanje petlji

Post by niho »

Pozdrav, ne znam koj chip koristis ali ako je recimo attiny2313 i zelis spojiti na port b onda bi trebalo prvo proglasiti ga izlaznim:

Code: Select all

config portb= output 
potom naj jednostavnije ako diode spajas prema "- " polu

Code: Select all

Do 
Pinb.0 = 1                                                'prva dioda
Waitms 25                                               ' bojim se da je 25 ms suviše kratko , uzmi bar 100
Pinb.0 = 0
Pinb.1 = 1                                                'druga dioda
Waitms 25
Pinb.1 = 0
Pinb.2 = 1                                               'treća dioda
Waitms 25
Pinb.2 = 0
Loop
naravno još jednostavnije izgleda ako te brojeve pretvoriš u decimalne:

Code: Select all

do
portb = 1
waitms 100
portb = 2
waitms 100
portb = 4    ' dalje bi bilo 8, 16, 32,... valjda znaš zašto.
waitms 100
loop
spojiti ova dva programa ćeš najlakše ako implementiraš decimalne brojeve:
primjer sijaju 4. i 1 to bi bilo 1001 = 9, zatim sijaju 4,5 i 2 to je 11010 =26, i na kraju 4,5,6 i 3 to je 111100=60 i onda ubaci pauze pa u petlju: to bi izgledalo ovako nekako:

Code: Select all

do
portb = 9
waitms 100
portb = 26
waitms 100
portb = 60   
waitms 100
loop
satsat
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 204
Joined: 30-09-2012, 14:01

Re: povezivanje petlji

Post by satsat »

koristim AT89C2051
Portovi idu na fet i fet pali diode
User avatar
niho
Pravi forumaš
Pravi forumaš
Posts: 1895
Joined: 24-09-2009, 17:26
Location: Brcko, Bosnia and Herzegovina

Re: povezivanje petlji

Post by niho »

Da svima bi nam bilo lakse da si stavio naziv kontrolera sa kojim radis. Ovako je to cisto gubljenje vremena. Ja radim sa attiny, atmega i nesto malo PIC. Nadam se da ce se sada javiti neko ko je bolji u ovom dijelu.
Pozdrav.
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: povezivanje petlji

Post by bob4 »

Evo dva različita programa (uz dopuštenje kolege Kukija)....
njegov:

Code: Select all

'****************************************************************
'*  Name    : LED.bas                                           *
'*  Author  : Kukinjos                                            *
'*  Notice  : za satsat                                                  *
'*          :                                                   *
'*  Date    : 21.03.2013                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

Dim Led_a As Byte
Dim Led_b As Byte
Dim I As Byte
Dim Led As Byte

I = 0
Led_a = 1
Led_b = 1

Do

Led = Led_b
Shift Led , Left , 3
Led = Led And &B11111000
Led = Led Or Led_a
P1 = Led

Incr I

Shift Led_a , Left , 1
If Led_a = 8 Then Led_a = 1

If I = 8 Or I = 16 Or I = 24 Then
   Shift Led_b , Left , 1
   Led_b = Led_b + 1
End If

If I = 64 Then
   Led_b = 0
   I = 0
End If

Waitms 250

Loop
i moj:

Code: Select all

'                  (c) bob4
' 6 LED za satsat             22.03.2013
'--------------------------------------------------

Dim I As Byte

Do
P1.2 = 0
P1.3 = 0
P1.4 = 0
P1.5 = 0
' 4 LED  stalno
For I = 1 To 10
P1.0 = 1
P1.3 = 1
Waitms 200
P1.1 = 1
P1.0 = 0
Waitms 200
P1.2 = 1
P1.1 = 0
Waitms 200
P1.2 = 0
Next

'-----------------------------
'5 LED stalno
For I = 1 To 10
P1.0 = 1
P1.4 = 1
Waitms 200
P1.1 = 1
P1.0 = 0
Waitms 200
P1.2 = 1
P1.1 = 0
Waitms 200
P1.2 = 0
Next


'----------------------------
' 6 LED stalno
For I = 1 To 10
P1.0 = 1
P1.5 = 1
Waitms 200
P1.1 = 1
P1.0 = 0
Waitms 200
P1.2 = 1
P1.1 = 0
Waitms 200
P1.2 = 0
Next


'----------------------------
'Dužina uključenosti LED 4,5 i 6
For I = 1 To 20
P1.0 = 1
Waitms 200
P1.1 = 1
P1.0 = 0
Waitms 200
P1.2 = 1
P1.1 = 0
Waitms 200
P1.2 = 0
Next

Loop
User avatar
bob4
Stariji član
Stariji član
Posts: 2572
Joined: 31-01-2010, 16:12
Location: Kutina

Re: povezivanje petlji

Post by bob4 »

I :oops: ; jel svjetli? :lol:
satsat
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 204
Joined: 30-09-2012, 14:01

Re: povezivanje petlji

Post by satsat »

s obzirom da mi je testna ploča doma a i cijeli projekt..probat ću tek za tjedan dana kad budem doma...a simulator i nije neki :D
satsat
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 204
Joined: 30-09-2012, 14:01

Re: povezivanje petlji

Post by satsat »

Na kraju sam to odradio sa ATMEGA16 u mikroC-u. Pa evo kod, možd nekome nekad zatreba :D

Code: Select all

int zub,grom;
void main() {
     DDRB.B0 = 1;     // inicijalizacija korištenih pinova
     DDRB.B1 = 1;
     DDRB.B2 = 1;
     DDRB.B3 = 1;
     DDRB.B4 = 1;
     DDRB.B5 = 1;
     DDRB.B6 = 1;
     DDRC.B0 = 1;
     DDRC.B1 = 1;
     DDRC.B2 = 1;
     
     
while(1){

         PORTB.B0 = 1;       // uključenje okvira
         Delay_ms(1000);
     
        for(zub=0;zub<15;zub++){
        
         PORTB.B1 = 1;    //zub 1
         PORTB.B2 = 0;
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 1;    //zub 2
         PORTB.B3 = 0;
         Delay_ms(30);
         
         PORTB.B1 = 0;
         PORTB.B2 = 0;
         PORTB.B3 = 1;    //zub 3
         Delay_ms(30);
         PORTB.B3 = 0;
                         }
         PORTB.B4 = 1;                          // I
         
         for(zub=0;zub<10;zub++){
         
         PORTB.B1 = 1;    //zub 1
         PORTB.B2 = 0;
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 1;    //zub 2
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 0;
         PORTB.B3 = 1;    //zub 3
         Delay_ms(30);
         PORTB.B3 = 0;
                         }
         PORTB.B5 = 1;                          // 0
         
         for(zub=0;zub<10;zub++){
         
         PORTB.B1 = 1;    //zub 1
         PORTB.B2 = 0;
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 1;    //zub 2
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 0;
         PORTB.B3 = 1;    //zub 3
         Delay_ms(30);
         PORTB.B3 = 0;
                         }
         PORTB.B6 = 1;                          // š
         
         for(zub=0;zub<10;zub++){
         
         PORTB.B1 = 1;    //zub 1
         PORTB.B2 = 0;
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 1;    //zub 2
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 0;
         PORTB.B3 = 1;    //zub 3
         Delay_ms(30);
         PORTB.B3 = 0;
                         }
                         
                         
         PORTC.B0 = 1;    // munja 1
         PORTC.B1 = 0;
         PORTC.B2 = 0;
         Delay_ms(1);
         
          for(zub=0;zub<1;zub++){

         PORTB.B1 = 1;    //zub 1
         PORTB.B2 = 0;
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 1;    //zub 2
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 0;
         PORTB.B3 = 1;    //zub 3
         Delay_ms(30);
         PORTB.B3 = 0;
                         }

         PORTC.B0 = 1;
         PORTC.B1 = 1;    // munja 2
         PORTC.B2 = 0;
         Delay_ms(1);
         
          for(zub=0;zub<1;zub++){

         PORTB.B1 = 1;    //zub 1
         PORTB.B2 = 0;
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 1;    //zub 2
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 0;
         PORTB.B3 = 1;    //zub 3
         Delay_ms(30);
         PORTB.B3 = 0;
                         }

         PORTC.B0 = 1;
         PORTC.B1 = 1;
         PORTC.B2 = 1;    // munja 3
         Delay_ms(1);
         
          for(zub=0;zub<1;zub++){

         PORTB.B1 = 1;    //zub 1
         PORTB.B2 = 0;
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 1;    //zub 2
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 0;
         PORTB.B3 = 1;    //zub 3
         Delay_ms(30);
         PORTB.B3 = 0;
                         }

         PORTC.B0 = 0;
         PORTC.B1 = 0;
         PORTC.B2 = 0;
         Delay_ms(1);
         
          for(zub=0;zub<1;zub++){

         PORTB.B1 = 1;    //zub 1
         PORTB.B2 = 0;
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 1;    //zub 2
         PORTB.B3 = 0;
         Delay_ms(30);

         PORTB.B1 = 0;
         PORTB.B2 = 0;
         PORTB.B3 = 1;    //zub 3
         Delay_ms(30);
         PORTB.B3 = 0;
                         }

         PORTB.B1 = 1;
         PORTB.B2 = 1;
         PORTB.B3 = 1;
         
         
         PORTC.B0 = 1;
         PORTC.B1 = 1;
         PORTC.B2 = 1;

         Delay_ms(2500);
         

        for(grom=0;grom<3;grom++){              // udar groma 3x
        
         PORTC.B0 = 1;    // munja 1
         PORTC.B1 = 0;
         PORTC.B2 = 0;
         Delay_ms(100);

         PORTC.B0 = 1;
         PORTC.B1 = 1;    // munja 2
         PORTC.B2 = 0;
         Delay_ms(100);

         PORTC.B0 = 1;
         PORTC.B1 = 1;
         PORTC.B2 = 1;    // munja 3
         Delay_ms(100);
         
         PORTC.B0 = 0;
         PORTC.B1 = 0;
         PORTC.B2 = 0;
         Delay_ms(100);

                                      }
                                      
         PORTC.B0 = 1;
         PORTC.B1 = 1;
         PORTC.B2 = 1;
         
         
         PORTB.B0 = 0;                          //isključi okvir
         PORTB.B1 = 0;                          //isključi zupčanik
         PORTB.B2 = 0;
         PORTB.B3 = 0;
         PORTB.B4 = 0;                          // isključi I
         PORTB.B5 = 0;                          // isključi O
         PORTB.B6 = 0;                          // isključi Š
         
         Delay_ms(900);
         
         PORTC.B0 = 0;                          // isključi munju
         PORTC.B1 = 0;
         PORTC.B2 = 0;
         
         Delay_ms(3000);
        }
                         
}
satsat
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 204
Joined: 30-09-2012, 14:01

Re: povezivanje petlji

Post by satsat »

Radi se o ovome projektu "led logo škole"
Kad završim, postavit ću u gotove projekte :D

http://oi46.tinypic.com/25011sj.jpg
Post Reply