Zavěrečná práce – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zavěrečná práce – C / C++ – Fórum – Programujte.comZavěrečná práce – C / C++ – Fórum – Programujte.com

 

Patrik
~ Anonymní uživatel
133 příspěvků
16. 5. 2012   #1
-
0
-

Prosím o pomoc s programem v Jazyce C. Psaný v programu AVR studio 4 pro mikrokontroler attiny 2313.

Zadání programu:

Budu všem moc vděčný kdo by mi s tímto programem poradil. Jsem totiž v koncích.

Předem děkuji.

Nahlásit jako SPAM
IP: 91.219.240.–
KIIV
~ Moderátor
+43
God of flame
16. 5. 2012   #2
-
0
-

tak prvni asi budes muset udelat to pocitani 15sekund... pak obdelnik... to je menit na portu 0 a 255... pak uz akorat sinus... mozna nejaka aproximace... par hodnot a dopocitat neco mezi ...

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Patrik
~ Anonymní uživatel
133 příspěvků
16. 5. 2012   #3
-
0
-

#2 KIIV
Tohle vím jenže nevím jak to vypočítat a pak jak to ani napsat :) Neznáte vzorečky na ty vypočty? :)

Nahlásit jako SPAM
IP: 91.219.240.–
KIIV
~ Moderátor
+43
God of flame
16. 5. 2012   #4
-
0
-

na to staci pole par hodnot... treba pro 0-90 stupnu s krokem po 10 stupnich ... kdy se bude predpokladat ze neco mezi je na primce - samozrejme hodnoty od  0 do 127 ...   takze napriklad   0=0 10=22 20=43 30=64 40=82 50=97 60=110 70=119 80=125 90=127

a kdyz chces pak hodnotu pro 6stupnu tak vis ze to bude v 6/10 mezi 0 a 22 =>  cca 13   (a vypocet: sin(pi*6/180)*127 = 13,27511483499199086778)   stejne o vetsinu presnosti prijdes osekavanim ...

a 88 stupnu:   125+2*8/10 => 126   a vypocet dava:  126,92263503142515771079   (proste osekavaci chyba...)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Patrik
~ Anonymní uživatel
133 příspěvků
16. 5. 2012   #5
-
0
-

#4 KIIV
Stejně jsem z toho jak se říká jelen. Nevypočítal by jste mi tenhle příklad celý? :) Jak pro sinus tak obdelník? :) Protože tomu vůbec nerozumím. A nebo nenapsal by jste mi rovnou ten program, protože vidím že tomu rozumíte a mě by to strašně pomohlo.

Předem velmi děkuji :).

Nahlásit jako SPAM
IP: 91.219.240.–
KIIV
~ Moderátor
+43
God of flame
16. 5. 2012   #6
-
0
-

pro me by to bylo snadne, ale neni to muj ukol... ty se tim mas neco naucit - ja z toho nic noveho mit nebudu

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Patrik
~ Anonymní uživatel
133 příspěvků
16. 5. 2012   #7
-
0
-

#6 KIIV
Já vím jenže jsem to nepochopil od učitele a když jsem za ním šel o vysvětlení tak mi řekl že to mám umět a propadám v tom předmětu a chtěl bych dokončit 3 ročník střední školy. Prosím moc o napsání toho programu.

Nahlásit jako SPAM
IP: 91.219.240.–
Patrik
~ Anonymní uživatel
133 příspěvků
16. 5. 2012   #8
-
0
-

#6 KIIV

Ještě jednou vážně prosím 

Nahlásit jako SPAM
IP: 91.219.240.–
yaqwsx+9
Posthunter
16. 5. 2012   #9
-
0
-

#8 Patrik
Představ si situaci, že by stejně jako ty uvažoval student medicíny. Šel by jsi pak k doktorovi nebo ne?

Nahlásit jako SPAM
IP: 85.160.58.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
KIIV
~ Moderátor
+43
God of flame
16. 5. 2012   #10
-
0
-

mozna to nebude s tou aproximaci moc horky... 60khz ti dava priblizne 333 instrukci pro 20MHz krystal... pokud budes delat preruseni tak sezeres 30 instrukci jak nic... a to jeste skoro nic nestihas .. takze budes rad, kdyz zvladnes preruseni aspon na 720kHz tak nebudes delat vesmes nic jinyho (a bude chtit pouzit 12 vzorku - pro uhly 0 30 60 90 .. 300 330) - vic z toho stejne nedostanes

Nahlásit jako SPAM
IP: 62.245.85.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Patrik
~ Anonymní uživatel
133 příspěvků
16. 5. 2012   #11
-
0
-

#10 KIIV
Děkuju, ale takhle to stejně nepochopím :( Achjo ... jsem asi fakt blbec.

Nahlásit jako SPAM
IP: 91.219.240.–
KIIV
~ Moderátor
+43
God of flame
16. 5. 2012   #12
-
0
-

tak google a zacni studovat o co kraci jinak to nejde

Nahlásit jako SPAM
IP: 62.245.85.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Patrik
~ Anonymní uživatel
133 příspěvků
16. 5. 2012   #13
-
0
-

Co my zbývá, ale nedávám si moc nadějí.

Nahlásit jako SPAM
IP: 91.219.240.–
KIIV
~ Moderátor
+43
God of flame
16. 5. 2012   #14
-
0
-

tak udelat neco takovyho:

unsigned char[] hodnoty = {127,}

while (1) {
  unsigned int i;

  // obdelnik 
  for ( i=0; i<40000; i++) {
    PORTB = 0; // 0V?
    _delay_loop_1(100); // tady bude chtit vypocitat podle frekvence oscilatoru -ted cca 16MHz
    PORTB = 255; // nastavit spravnou hodnotu - ted asi 5V
    _delay_loop_2(300-20); // for cyklus ma taky nejaky zpozdeni takze cca 20instrukci odecteme at je to co nejblize 60kHz
  }

  //sinus
  for ( i=0; i<60000; i++) {
    for (char j=0; j<12; j++) {
      PORTB=hodnota[j];
      _delay_loop_1(10); // hodne hodne od oka
    }
  }
}
Nahlásit jako SPAM
IP: 62.245.85.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Patrik
~ Anonymní uživatel
133 příspěvků
16. 5. 2012   #15
-
0
-

Dekuju moc aspon za tohle :( A to je pro sinus? nebo je tam i tech 15s

Nahlásit jako SPAM
IP: 91.219.240.–
KIIV
~ Moderátor
+43
God of flame
16. 5. 2012   #16
-
0
-

budes muset promerit.. je to fakt tezce odhadnuty... + samozrejme spravny hodnoty do ty promenny .. tj vsech 12

Nahlásit jako SPAM
IP: 62.245.85.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Patrik
~ Anonymní uživatel
133 příspěvků
16. 5. 2012   #17
-
0
-

Jojo, no on nám ucitel říkál co si pamatuju že musime vypociat T, pak to N což jsou ty čisla od 0 do 255 a pak z toho vseho nejak vypocitat pocet dílků a ten pocet dílku vydšlit 360 u sinusovek a vyjdou nám časti na ose kde je 360 stupnu co si pamatuju, . Ale to si pamatuju jen tak teoreticky a nevím jak to vypočítat no :)

Nahlásit jako SPAM
IP: 91.219.240.–
KIIV
~ Moderátor
+43
God of flame
16. 5. 2012   #18
-
0
-

na to abys dal 60kHz mas zatracene pomalej procesor... uz jen na 12vzorku cely sinusovky (to je kazdejch 30 stupnu) mas pokazdy mezi nima presne 22 cyklu oscilatoru tj maximalne 22 instrukci  ( 16000000/(60000*12) )

proste zadna sinusovka se nekona... je to spis takovej stan

Nahlásit jako SPAM
IP: 62.245.85.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Patrik
~ Anonymní uživatel
133 příspěvků
16. 5. 2012   #19
-
0
-

No říkal nám učitel sinousovej prubeh tyjo tak já nevím :(

Nahlásit jako SPAM
IP: 91.219.240.–
Patrik
~ Anonymní uživatel
133 příspěvků
16. 5. 2012   #20
-
0
-

A ještě jeden dotaz dnes. Je někde nejaká literatura o tech převodních a mikrokontroleru attiny 2313 v cestině?

Nahlásit jako SPAM
IP: 91.219.240.–
KIIV
~ Moderátor
+43
God of flame
16. 5. 2012   #21
-
0
-

#20 Patrik
pochybuju.. jen se uc pekne v anglictine

Nahlásit jako SPAM
IP: 62.245.85.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Patrik
~ Anonymní uživatel
133 příspěvků
16. 5. 2012   #22
-
0
-

No to jo ale mám napsat 3 NS o tom mikrokontroleru a od DAC ;)

Nahlásit jako SPAM
IP: 91.219.240.–
Patrik
~ Anonymní uživatel
133 příspěvků
17. 5. 2012   #23
-
0
-

 Dobrý den přikládám zde program který jsem dnes vytvořil a odzkoušel ve škole. Program na obdélníkový průběh jel bez problémů, ten byl jak jsem zjistil velmi lehký, ale již jsem nedokázal přijit na to jak k tomu přidat sinusový průběh, který se po 15 s změní na ten obdelníkový. Prosím pomohl by jste mi tento program dodělat?

#include <avr/io.h>
//#include <avr/iotn2313.h>
#define F_CPU 20000000UL
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/cpufunc.h>
#include <avr/sfr_defs.h>

unsigned char a=0,klav=0,hodnotatl=0;
unsigned char pole [20] = {0x97,0xAD,0xBD,0xC9,0xCD,0xC9,0xBD,0xAD,0x97,0x80,0x68,0x53,0x42,0x37,0x33,0x37,0x42,0x53,0x68,0x80}; //hodnoty sinusového průběhu

void zobraza(unsigned char a)	//funkce pro zobrazení na 7seg
{
	PORTB = pole[klav];			//vybrání pole podle hodnoty
}

int main(void)
{
    
	DDRB = 255;	//smĚr toku dat je nastaven na samých 1 => je jako výstupní
	DDRD = 0;	//Led diody se zhasnou, jelikož jsou zapsány samé 1
	PIND = hodnotatl;
		while(1)		//nekonečná smyeka pro obdélník
		{		
			PORTB = 0xCD;	
			_delay_us(12);
			PORTB = 128;
			_delay_us(4);
			
/*					if (hodnotatl>0)
						{
						zobraza(klav);
						hodnotatl=0;
						}*/
		}
}

Zde jsou ještě obrázky tabulky vypočítaných hodnot k sinusovému a obdelníkovému průběhu:

sinusový průběh

obdelníkový průběh

Budu velmi vděčný za každou pomoc.

Předem mnohokrát děkuji :)

Nahlásit jako SPAM
IP: 91.219.240.–
Patrik
~ Anonymní uživatel
133 příspěvků
17. 5. 2012   #24
-
0
-

A také v programu jsem navrchu zatím zadefinoval sinusové hodnoty, což jsem ještě zvládl a co mě napadlo, ale již nevím jak dál.

Nahlásit jako SPAM
IP: 91.219.240.–
Patrik
~ Anonymní uživatel
133 příspěvků
18. 5. 2012   #25
-
0
-

Prosíím, vážně nikdo netušíí?

Nahlásit jako SPAM
IP: 91.219.240.–
KIIV
~ Moderátor
+43
God of flame
18. 5. 2012   #26
-
0
-

nacrt sem uz daval.. uz musis akorat bud vedet kolik period si udelal a po mnozstvi dostatecnem na 15sekund prepnout...

nebo na to vyuzit casovac (za cenu ze ti bude delat zpozdeni v prubehu)

EDIT: a 20 hodnot skoro nemas sanci nijak uridit - je to na to prilis pomaly

jedna perioda sinusovky ma byt 1,67 mikrosekundy a kdyz to chces jeste rosekat na 20 casti tak mas 833nanosekund ... a pri 20MHz krystalu trva jedna instrukce 50 nanosekund - mas jen 16instrukci na to, abys vubec neco stihl udelat to muze stacit na vypisovani dat z pole.. ale ne na nejakou kontrolu kde a jak dlouho ses...

+ attiny 1 neexistuje  ... jestli je to tiny 13 tak je to mala mrcha a jeste maximalne 10MHz

tiny 2313 uz mas sanci aspon na tech 20MHz

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Patrik
~ Anonymní uživatel
133 příspěvků
18. 5. 2012   #27
-
0
-

Je to tiny 2313. No prej o jde rikal ucitel. Rikal ze tento program rozpracovanej je dobrej jen potrebuji doresit realizaci te sinusovky a spozdeni... Ale nevim jak . Slo by to tak ze bych zadefinovane hodnoty posilal jednotlive pomoci portb? Ae jak udelat zpozdeni? A to prepnuti na obdelnik? A vsechno by melo byt ve smicce while??

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 91.219.241.–
Patrik
~ Anonymní uživatel
133 příspěvků
18. 5. 2012   #28
-
0
-

Slo by to takto??

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 91.219.241.–
Patrik
~ Anonymní uživatel
133 příspěvků
19. 5. 2012   #29
-
0
-

??

Nahlásit jako SPAM
IP: 91.219.240.–
Patrik
~ Anonymní uživatel
133 příspěvků
19. 5. 2012   #30
-
0
-

Prosím  neznáte někdo suprove stranky o Attiny 2313 a DAC převodníku

Nahlásit jako SPAM
IP: 91.219.240.–
bob
~ Anonymní uživatel
46 příspěvků
20. 5. 2012   #31
-
0
-
Nahlásit jako SPAM
IP: 95.82.154.–
Patrik
~ Anonymní uživatel
133 příspěvků
20. 5. 2012   #32
-
0
-

Potřeboval bych neco v cestine ale o attiny 2313 a DAC ;)

Protože z toho musím napsat 3NS ;)

Nahlásit jako SPAM
IP: 91.219.240.–
Patrik
~ Anonymní uživatel
133 příspěvků
30. 5. 2012   #33
-
0
-

   

#define F_CPU 20000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sfr_defs.h>
#include <util/delay.h> 

unsigned char sinus [20] = {151, 173, 189, 201, 205, 201, 189, 173, 151, 128, 104, 83, 66, 55, 51, 55, 66, 83, 104, 128};   //hodnoty sinusu
int max = 19, x = 0, stav = 1,sec = 0;

ISR(TIMER1_COMPA_vect){
	sei();
	if(sec == 14){     
		sec = 0;
		if(stav == 1){
			stav = 2;
			sin();
		}else if(stav == 2){
			stav = 1;
			obdelnik();
		}
		
	}else{
		sec++;
	}
}

int sin()
{
	while(1){
		for(x=0;x<=max;x++){
			PORTB = sinus[x];
		}
	}
}

int obdelnik()
{
	while(1){       // cyklus pro obdelník
		PORTB = 51;
		_delay_us(47);  // spoždění
		PORTB = 205;   // hodnota obdelníku
		_delay_us(47); // spoždění
	}
}

int main(void)
{
	DDRB 	= 0xFF;
	PORTB 	= 0x80;
	TCCR1B = (1 << WGM12)|(5 << CS10);
	TIMSK = (1 << OCIE1A);
	OCR1A = 19531;
	sei();
	obdelnik();
}

Tak tohle jsme vymyslely s kamošem a jede to, jenže to co vymyšlel on tak neumím okomentovat protože tomu moc nechápu tak bych chtěl poprosit někoho z vas jestli by mi to neokomentoval ty radky ktere nejsou okomentovane? Předem moc děkuji :)

Nahlásit jako SPAM
IP: 91.219.240.–
Patrik
~ Anonymní uživatel
133 příspěvků
30. 5. 2012   #34
-
0
-

Prosím udělal by mi k programu nekdo komentáře?

Nahlásit jako SPAM
IP: 91.219.240.–
Patrik
~ Anonymní uživatel
133 příspěvků
30. 5. 2012   #35
-
0
-

Tak popisy uz mám ale vyvojáč ten bude problem ,je tu někdo kdo by mi s tímto pomohl? :)

Nahlásit jako SPAM
IP: 91.219.240.–
KIIV
~ Moderátor
+43
God of flame
30. 5. 2012   #36
-
0
-

ehm ... nema to urcite problemky ? napriklad resety? kazdopadne nic moc

Nahlásit jako SPAM
IP: 62.245.85.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Patrik
~ Anonymní uživatel
133 příspěvků
30. 5. 2012   #37
-
0
-

Fungovalo nám to :) Tak nevím, snad tim aspon z části uspěju :) A osobne jsem rád že se mi aspon tohle povedlo, ale nevi msi rády s vývojáčem. Neporadil by jste mi :)

Nahlásit jako SPAM
IP: 91.219.240.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 16 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý