logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C] stoper - zmiana rozdzielczości

pytek84 28 Maj 2009 22:05 1873 7
REKLAMA
  • #1 6587826
    pytek84
    Poziom 2  
    witam
    Napisalem z wielkim trudem i z pomoca poczatkujacego kolegi oraz materialow program stopera ale nie wiemy gdzie popelnilismy blad poniewaz chcialem aby zliczal z dokladnoscia 1ms a zlicza z 10ms. napewno jest to jakas drobna pomyłka ale niemoge jej znalesc. wiec prosze wszystkich o pomoc. program umieszczam w zalczniku

    Poprawiłem temat i przeniosłem z Programowanie początkujący.
    [Dr.Vee]
  • REKLAMA
  • REKLAMA
  • #3 6588181
    KowalD
    Poziom 17  
    to program na avr jest ;)...

    ale przeciez sam w komentarzu przy ustawieniach timera 1 napisales, ze do 10ms ma zliczac :)...
  • #4 6588321
    pytek84
    Poziom 2  
    bo taki mi sie udalo stworzyc a chcialem z wieksza dokladnoscia
  • REKLAMA
  • #5 6588433
    Dr.Vee
    VIP Zasłużony dla elektroda
    Oj, chyba to nie jest ani Twój program, ani nawet kolegi...

    Przecież masz jak byk wpisane:
    OCR1A = 10000; // licz do 10ms
    Teraz zastanów się, co tam trzeba wpisać, żeby zliczał do 1ms... :>

    No i oczywiście wypadałoby wtedy przesunąć kropkę dziesiętną, ale to już zostawię Tobie jako ćwiczenie :)

    Pozdrawiam,
    Dr.Vee
  • REKLAMA
  • #6 6588570
    pytek84
    Poziom 2  
    probowalem zrobic takie cos:
    
    OCR1A=1000;   
    TIMSK=0x40;		 
    TCCR1B=0x08;	 
    sei();			 
    }
    
     void display(void)
    {
    tmp=licznik;
    if (tmp>9999)		  
    	{
    	ty=10;
    	st=11;		 
    	dz=12;
    	jn=13;
    	}
    else
    	{
    	ty=tmp/1000;	 
    	tmp=tmp%1000;	
    	st=tmp/100;		 
    	tmp=tmp%100;	
    	dz=tmp/10;		 
    	tmp=tmp%10;
    	jn=tmp;			 
    	}
    unsigned char i;
    DDRD=0;
    DDRB=liczby[jn];		 
    DDRD=1;
    for(i=0;i<250;i++);		 
    DDRD=0;
    DDRB=liczby[dz];		 
    DDRD=2;
    for(i=0;i<250;i++);		 
    DDRD=0;					
    DDRB=liczby[st];		 
    DDRD=4;
    for(i=0;i<250;i++);		 
    DDRD=0;
    DDRB=liczby[ty];		 
    if(ty!=11)
    	DDRB|=1;			 
    DDRD=32;
    for(i=0;i<250;i++);		 
    }
    

    i nie zlicza co do 1ms pomocy

    Proszę stosować znaczniki [code] - poprawiłem.
    [zumek]
  • #7 6588747
    Dr.Vee
    VIP Zasłużony dla elektroda
    Kolego wysil się trochę... Co oznacza "nie zlicza co do 1ms" - napisz jakie są efekty. Co za procesor, jaka częstotliwość taktowania, czy zmieniałeś fuse bity itp.

    Tak na szybko to zm. licznik powinna być zadeklarowana jako
    volatile short int licznik;

    Poza tym zanim wyświetlisz całą liczbę, to zawartość "licznik" już się zdąży zmienić dzięki przerwaniu.
    Pozdrawiam,
    Dr.Vee
  • #8 6590181
    pytek84
    Poziom 2  
    wogole niechce ruszyc symulacja. źródło sygnału taktującego,jest generowany przez zewnętrzny kwarc o czest 12Mhz. procesor Attiny2313
REKLAMA