Diskusija o MSP, ARM / LPC, PLC kontrolerima.
Moderators: pedja089 , stojke369 , [eDo] , trax
satsat
Pravo uznapredovao :)
Posts: 204 Joined: 30-09-2012, 14:01
Post
by satsat » 20-03-2013, 18:07
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
niho
Pravi forumaš
Posts: 1895 Joined: 24-09-2009, 17:26
Location: Brcko, Bosnia and Herzegovina
Post
by niho » 20-03-2013, 19:51
Pozdrav, ne znam koj chip koristis ali ako je recimo attiny2313 i zelis spojiti na port b onda bi trebalo prvo proglasiti ga izlaznim:
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 :)
Posts: 204 Joined: 30-09-2012, 14:01
Post
by satsat » 21-03-2013, 08:57
koristim AT89C2051
Portovi idu na fet i fet pali diode
niho
Pravi forumaš
Posts: 1895 Joined: 24-09-2009, 17:26
Location: Brcko, Bosnia and Herzegovina
Post
by niho » 21-03-2013, 18:51
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.
bob4
Stariji član
Posts: 2572 Joined: 31-01-2010, 16:12
Location: Kutina
Post
by bob4 » 21-03-2013, 21:47
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
bob4
Stariji član
Posts: 2572 Joined: 31-01-2010, 16:12
Location: Kutina
Post
by bob4 » 22-03-2013, 21:40
I
; jel svjetli?
satsat
Pravo uznapredovao :)
Posts: 204 Joined: 30-09-2012, 14:01
Post
by satsat » 23-03-2013, 20:44
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
satsat
Pravo uznapredovao :)
Posts: 204 Joined: 30-09-2012, 14:01
Post
by satsat » 16-04-2013, 00:22
Na kraju sam to odradio sa ATMEGA16 u mikroC-u. Pa evo kod, možd nekome nekad zatreba
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);
}
}