Avtor |
Sporočilo |
matic.benedik
Super modelar
Pridružen/-a: 18.07. 2006, 15:24
Prispevkov: 68
Kraj: žiri
|
Objavljeno:
22 Mar 2012 15:56 |
|
lep pozdrav.
mene zanima če ima kdo kakšne izkušnje z programiranjem v C jeziku
za maturo imam namreč nalogo meritev hitrosti med dvema točkama.
če ima kdo kakšno idejo se zelo priporočam.
lp matic |
|
|
|
 |
Matic
Super modelar

Pridružen/-a: 09.07. 2006, 22:53
Prispevkov: 186
Kraj: Žiri
|
Objavljeno:
22 Mar 2012 17:24 |
|
Malo bolj razloži kje imaš težavo, pa bomo videli, če se da kaj pomagat.
Mislim da ni problem programskega jezika.
LP, Matic |
|
|
|
 |
matic.benedik
Super modelar
Pridružen/-a: 18.07. 2006, 15:24
Prispevkov: 68
Kraj: žiri
|
Objavljeno:
22 Mar 2012 18:12 |
|
predstavljaj si nalet na skakalnici tam kjer je radius ( krivina naleta) je največja hitrost skakalca. se pravi postaviš nekje v radiusu 2 fotoupora na razdalji npr 3 metre. ko skakalec prekine žarek na 1. fotouporu začne šteti, ko pa prekine drugega se štetje konča.
če ti kaj pomaga ti lahko pošljem približen načrt ki ne deluje
lp matic |
|
|
|
 |
Matic
Super modelar

Pridružen/-a: 09.07. 2006, 22:53
Prispevkov: 186
Kraj: Žiri
|
Objavljeno:
22 Mar 2012 19:26 |
|
Si predstavljam...
Pošlji, pa bomo pogledali, če bo kaj jasno.
Na čem moraš to narediti? Predpostavljam, da to ni PC aplikacija.
Glede na to, da gre samo za preprosto merjenje časa, naj ne bi bilo prav težko. Edina stvar, ki jo moraš vedet, je poznat način (enega izmed njih) merjenja časa na dani platformi ter poznat interface do fotocelic.
Povej podrobnosti, da sploh vemo kako pomagat.
LP, Matic |
|
|
|
 |
matic.benedik
Super modelar
Pridružen/-a: 18.07. 2006, 15:24
Prispevkov: 68
Kraj: žiri
|
Objavljeno:
22 Mar 2012 20:07 |
|
//============================================================================
// Name : Hitrost.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <16F628A.h>
int int_bit = 0;
int stotice = 0;
int desetice = 0;
int enice = 0;
int desetinke = 0;
int stevec1 = 0;
int cas = 65535;
int v = 0;
int a = 0;
int i = 0;
const int cifre [] = {0b01111110,0b00100100,0b11011100,0b11101100,0b10100110,0b11101010,0b11111010,0b01100100,0b11111110,0b11101110};
#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)
#int_timer1
void timer1interrupt() {
stevec1++;
}
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;
}
void izracun()
{
while(!INPUT(PIN_A0)) {
}
a = get_timer1();
disable_interrupts(int_timer1);
cas *= stevec1;
cas = cas + a;
cas /=100;
v = 7200000 / cas; //razdalja med senzorjema 2m;
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;
}
}
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);
}
}
}
void izpis(desetice, enice, desetinke) {
if(desetice > 0)
{
output_b(cifre[desetice]);
}
delay_ms(5);
output_low(PIN_A3);
output_high(PIN_A2);
output_b(cifre[enice]);
delay_ms(5);
output_low(PIN_A2);
output_high(PIN_A1);
output_b(cifre[desetinke]);
delay_ms(5);
output_low(PIN_A1);
if(i < 202)
{
i++;
}
re |
|
|
|
 |
Matic
Super modelar

Pridružen/-a: 09.07. 2006, 22:53
Prispevkov: 186
Kraj: Žiri
|
Objavljeno:
23 Mar 2012 07:47 |
|
Glede na header file, vidim da je to program za PIC.
S PICom nisem delal še nikoli nič, tako da glede timerjev in teh zadev na njem nimam pojma.
Bom malce kasneje preletel tale tvoj program, če mi bo kaj jasno.
Povej s čim imaš težavo in kaj točno ti ne dela.
LP, Matic |
|
|
|
 |
matic.benedik
Super modelar
Pridružen/-a: 18.07. 2006, 15:24
Prispevkov: 68
Kraj: žiri
|
Objavljeno:
23 Mar 2012 20:43 |
|
Tako je program je napisan za pic. Potem bi preko preprostega vezja povezal s fotocelicami |
|
|
|
 |
Matic
Super modelar

Pridružen/-a: 09.07. 2006, 22:53
Prispevkov: 186
Kraj: Žiri
|
Objavljeno:
02 Apr 2012 07:36 |
|
Živjo!
Par dni sem bil malce odsoten.
Torej... Povej kaj ti v zgornjem primeru ne deluje, oziroma s čim imaš probleme. Tako, da vemo kje pogledat.
Se ti zadeva "skompajla" in samo ne deluje pravilno, ali je že pri bildanju problem?
LP, Matic |
|
|
|
 |
matic.benedik
Super modelar
Pridružen/-a: 18.07. 2006, 15:24
Prispevkov: 68
Kraj: žiri
|
Objavljeno:
06 Apr 2012 15:02 |
|
#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;
}
evo s prijateljem sva začela povsem na novo in uspelo nama je zgoraj je delujoč program
če ima kdo kakšno idejo za sestavo vezja??
uporabljen bi bil pic 16F628A |
|
|
|
 |
|
|
Poglej naslednjo temo
Poglej prejšnjo temo
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 |
MojForum.si - brezplačno gostovanje forumov. Powered by phpBB 2.
|