Uživatel:Sucharic

Z MAM wiki

Přejít na: navigace, hledání

Tak nevím, zda je zde to pravé místo pro editaci a uložení mé práce, ale snad ano :-)

[editovat] Zadání práce

Generátor signálů

Procesor bude generovat na výstup průběhy pily, trojúhelníku, obdelníku a sinu. Změnu periody budou obstarávat tlačítka (ve smyčce zpoždění). Napěťová úroveň se bude měnit pomocí jednoduchého děliče na výstupu.


Prosím ostatní kolegy, kteří mají také toto zadání, aby sem kdyžtak připsali své jméno a samozřejmě bez obav editovali a doplňovali :-)

Na této verzi zadání zatím pracuji já (Richard Suchan) a Filip Saturka

[editovat] Pokusy, nápady

Práce bude zpracována v jazyce C. Mám zatím jenom drobné nápady a doufám, že se brzy někdo přidá, abychom to mohli dát dohromady.

V hlavní části programu bych to viděl na cyklus while, který by měl nekonečnou smyčku a zde by se přes switch volilo, co bude na výstupu. Ještě před hlavním programem je definice (/procedura) zpoždění,pila, trojuhelníku, obdelniku a sinu. Chce to ještě doplnit vstup z klávesnice a zakomponovat to do toho.



#include <avr/io.h> 
#include <avr/iom168.h> 
#include <math.h>

unsigned char znak, cislo;
int zp;
int i,j,k;
int P1;

void zpozdeni() {
 for (i=0;i<zp;i++);  
  }
void pila() {
    cislo = '1';
 	if (P1==255) P1=0;  
	while (P1!=255){
	P1++;
        PORTB = P1;
	zpozdeni();
  }
}

void trojuhelnik() {  
   cislo = '2';
   P1=0;
	while (P1!=255) {
    P1++;
    zpozdeni();
    }
	while (P1!=0) {
    P1--;
    PORTB = P1;
	zpozdeni();
    }	
}

void obdelnik() {
	cislo = '3';
	P1 = 0;
	k=0;
  	while (k!=255) {
	P1 = 0;
	k++;
        PORTB = P1;
	zpozdeni();
	}
	
}

//code unsigned char funkce_sin[32] = {128,153,177,199,218,234,245,253,255,253,245,234,218,199,177,153,128,103,79,57,38,22,11,3,1,3,11,22,38,57,79,103};

//void sinus() {
  // cislo = '4';
//		j=0;
 //	while (j!=32) {
//	P1 = funkce_sin[j]; 
//	j++;
//      PORTB = P1;
//	   zpozdeni();
//	  	   }
//}



void main() {

DDRB=0xFF; // vystup na vsechny nozicky portu B


//tady ještě nějaké věci..

while(1){
 switch (znak) {
 case '1': pila(); break;
 case '2': trojuhelnik(); break;
 case '3': obdelnik(); break;
 //case '4':sinus(); break;
 default: break;
 }
}
}


no a díky tomu switchi by se vždy skočilo na příslušnou proceduru, která by zajišťovala příslušný průběh.

Tahle to funguje v překladači, ten sinus zlobí, tak kdyby měl někdo nápad jak to předělat budu rád. Přidal jsem výstup na pinB, nevim jestli to je zprávně, ještě to chce vstupy.

Na výstupu bude podle rady P.Náhlíka invertující součtový zesilovač (vstupy budou na portu B) sestavený z operačního zesilovače, a na výstupu bude kondenzátor pro vyhlazení průběhu.

Osobní nástroje