 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
vitez93 Član


Pridružen-a: Pet 19 Sep 2008 20:00 Prispevkov: 1018 Aktiv.: 4.99 Kraj: Celje- Dobrna
|
Objavljeno: Sob Okt 03, 2009 3:26 pm Naslov sporočila: |
|
|
Vse imam sestavljeno. Dela tako tako. Včasih da ven čudne rezultate, včasih ko se prvi senzor prekine prikazovalnik ugasne. Kako bi naredil program nekako bolj stabilen/odporen na čudne meritve časa. Recimo ko program izračuna desetice in dobi 15, kliče tabelo za izpis in preskoči celotno tabelo in "pristane" nekje nižje, kjer je recimo podprogram za pavzo.
Opis: |
|
Velikost datoteke: |
621.65 KB |
Pogledana: |
2 krat |

|
Opis: |
|
Velikost datoteke: |
697 KB |
Pogledana: |
2 krat |

|
Opis: |
|
Velikost datoteke: |
654.23 KB |
Pogledana: |
1 krat |

|
Opis: |
12F629 oddajnika IR "žarka" |
|
Velikost datoteke: |
643.72 KB |
Pogledana: |
1 krat |

|
|
|
Nazaj na vrh |
|
 |
vitez93 Član


Pridružen-a: Pet 19 Sep 2008 20:00 Prispevkov: 1018 Aktiv.: 4.99 Kraj: Celje- Dobrna
|
Objavljeno: Čet Nov 04, 2010 8:54 pm Naslov sporočila: |
|
|
<13 mesecev kasneje...>
...Je stvar stekla tako kot mora. Sem se naučil programirati v C, s katerim je bile za ta projekt vse lažje. Predvsem pa računanje z velikimi števili. Senzorja sem spravil v ohišji in dodal signalne ledike za signal in napetost.
Danes smo stvar testirali z kolegovim APN 6S in dosegel sem (po ravnini v hrib naslonjeni) 54,1km/h. Moram poiskati eno neprometno ravninco, da preizkusimo do 99,9 km/h z mojim kawasakijom.
Potem me čaka še izdelava enih večjih cifer in prikaz na stotinke točno.
Koda: |
#include <16F628A.h>
int1 int_bit = 0;
int8 stotice = 0;
int8 desetice = 0;
int8 enice = 0;
int8 desetinke = 0;
int16 stevec1 = 0;
int32 cas = 65535;
int32 v = 0;
int16 a = 0;
int8 i = 0;
#use delay(clock=4M)
#FUSES XT, NOWDT, NOPUT, NOMCLR, NOPROTECT, NOCPD, NOBROWNOUT, NOLVP
#use fixed_io(b_outputs=PIN_B1, PIN_B2, PIN_B3, PIN_B4, PIN_B5, PIN_B6, PIN_B7)
//******************Preliv timerja**********************
#int_timer1
void timer1interrupt() {
stevec1++;
return;
}
void izpis(desetice, enice, desetinke);
void izracun();
#INT_EXT
void senzor()
{
disable_interrupts(int_ext);
clear_interrupt(int_timer1);
enable_interrupts(int_timer1);
set_timer1(0);
int_bit = 1;
return;
}
void izracun()
{
while( !INPUT(PIN_A0) )
{
}
a = get_timer1();
disable_interrupts(int_timer1);
cas *= stevec1;
cas = cas + a;
cas /=100;
v = 7200000 / cas; //Za razdaljo med senzorjima: 8m -28800000, za 2m - 7200000
stotice = v / 10000;
v %= 10000;
desetice = v / 1000;
v %= 1000;
enice = v / 100;
v %= 100;
desetinke = v / 10;
stevec1 = 0;
int_bit = 0;
i = 0;
cas = 65535;
if(stotice >= 1){
desetice = 12;
enice = 12;
desetinke = 12;
}
return;
}
//*******************GLAVNI********************************
void main(void)
{
SET_TRIS_B(0b00000001);
SET_TRIS_A(0b00000001);
INPUT(PIN_B0);
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_1 );
enable_interrupts(GLOBAL);
ext_int_edge( 0, L_TO_H);
while(true)
{
izpis(desetice, enice, desetinke);
if(int_bit == 1)
{
izracun();
}
if(i == 200)
{
clear_interrupt(int_ext);
enable_interrupts(int_ext);
ext_int_edge( 0, L_TO_H);
}
}
}
//**********************MUX prikaz oziroma izpis na led prikazovalnike*******
void izpis(desetice, enice, desetinke) {
if(desetice > 0)
{
output_high(PIN_A3);
switch (desetice) {
case 0: output_B(0b01111110);
break;
case 1: output_B(0b00100100);
break;
case 2: output_B(0b11011100);
break;
case 3: output_B(0b11101100);
break;
case 4: output_B(0b10100110);
break;
case 5: output_B(0b11101010);
break;
case 6: output_B(0b11111010);
break;
case 7: output_B(0b01100100);
break;
case 8: output_B(0b11111110);
break;
case 9: output_B(0b11101110);
break;
case 15: output_B(0b00001000);
break;
case 12: output_B(0b11011010);
break;
}
}
delay_ms(5);
output_low(PIN_A3);
output_high(PIN_A2);
switch (enice) {
case 0: output_B(0b01111110);
break;
case 1: output_B(0b00100100);
break;
case 2: output_B(0b11011100);
break;
case 3: output_B(0b11101100);
break;
case 4: output_B(0b10100110);
break;
case 5: output_B(0b11101010);
break;
case 6: output_B(0b11111010);
break;
case 7: output_B(0b01100100);
break;
case 8: output_B(0b11111110);
break;
case 9: output_B(0b11101110);
break;
case 15: output_B(0b00001000);
break;
case 12: output_B(0b10010000);
break;
}
delay_ms(5);
output_low(PIN_A2);
output_high(PIN_A1);
switch (desetinke) {
case 0: output_B(0b01111110);
break;
case 1: output_B(0b00100100);
break;
case 2: output_B(0b11011100);
break;
case 3: output_B(0b11101100);
break;
case 4: output_B(0b10100110);
break;
case 5: output_B(0b11101010);
break;
case 6: output_B(0b11111010);
break;
case 7: output_B(0b01100100);
break;
case 8: output_B(0b11111110);
break;
case 9: output_B(0b11101110);
break;
case 15: output_B(0b00001000);
break;
case 12: output_B(0b10010000);
break;
}
delay_ms(5);
output_low(PIN_A1);
if(i < 202)
{
i++;
}
return;
}
|
|
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Čet Nov 04, 2010 9:42 pm Naslov sporočila: |
|
|
Tako mimogrede:
- v funkcijah tipa void ni treba pisat "return", saj funkcija ne vrača vrednosti
- vse spremenljivke, ki jih uporabljaš v prekinitvah, definiraj kot "volatile"
- multipleksiranje prikaza probaj rešit v timer prekinitvi... je bolj elegantno

_________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Čet Nov 04, 2010 10:47 pm Naslov sporočila: |
|
|
In seveda ne uporabljaj switch in tabele vsakič, ampak enostavno uporabi konstantna polja....
Koda: |
const int8 cifre [10] = {0b01111110,0b00100100,0b11011100...} |
Potem pa enostavno narediš
Koda: |
output_b(cifre[desetinke]);
|
Poleg tega brezveze pri CCS-ju nastavljaš TRIS kadar ne uporabljaš konstantnih vhodov izhodov. Pusti da CCS to naredi sam, smer določi samo za vhodni INT pin
|
|
Nazaj na vrh |
|
 |
juremav Neznanec

Pridružen-a: Čet 23 Avg 2012 11:10 Prispevkov: 1 Aktiv.: 0.01
|
Objavljeno: Čet Avg 23, 2012 11:12 am Naslov sporočila: |
|
|
Se da dobiti tudi shemo vezja in seznam elementov?
|
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|