Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 10 09, 00:47. Visos datos yra GMT + 2 valandos.
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
As tai naudoju AVR studio 4. Kazkada bandziau programuoti ir su CodeVisionAVR, bet turbut radau daugiau pavyzdziu ant avr studio ir prie jos likau o seip labai dideliu skirtumu nera.
Aš tai naudoju CodeVision. Dabar jau prieinama 2.05 versija.
Man, kaip amžinam pradedančiajam sakyčiau kodų generatorius yra gėris. Kadangi tenka kartais rinktis mikrovaldiklį, tai labai patogu kodų generatorių naudoti netgi kaip žinyną. Iškart matai, kokias funkcijas vienas ar kitas attiny ar atmega galės atlikti. Be standartinių funkcijų sureguliavimo, kodų generatorius dar lengvai surašo gatavą kodą tarkim LCD valdymui, automatiniam ADC išvadų skanavimui ir t.t. 2.05 versijoje kodų generatoriaus langas gali veikti kartu su pagrindiniu, taigi programos rašymo eigoje galima lengvai pakeisti mikrovaldiklio funkcijas,- šalia savo programos sugeneruoji kitokį pradinį kodą, ir pakeiti pasenusius gabalus. Viskas lakoniškai, bet pakankamai ir aiškiai komentuojama.
Yra nebloga pagalbos sistema.
Minusas galbūt tik gatavų pavyzdžių negausa. Bet pasistudijuoji AVR Studio programėles, ir padaręs nedidelius teksto pakeitimus irgi gali naudoti CodeVision terpėje.
CodeVision turi ir priemones parašytą programą toliau debuginti AVR Studio-joje.
GCC. Beje pataisysiu, sakydami AVRStudio4 turite omenyje ne kompiliatorių o IDE ir debugerį. Kompiliatorius ten AVR-GCC (WINAVR). Nežinau kodėl Codevision taip kabliuoja su tuo kodo generatorium... mano galva ten prigeneruoja duagiau šlamšto nei neudingo kodo. Marketinginis triukas.
Taip, čia kalba apie IDE. Nepykit, bet panašu kad kritika codevision atžvilgiu kyla dažniausiai spontaniškai, net turbūt nepabandžius Pateiksiu ant greitųjų sustumtą kodų generatoriaus programos ruošinį. Manau kodo "šlamšto" ten išvis nėra. Komentarai nesiskaito O "tobulėjimui" - pilna vietos, už kiekvieno "// Place your code here". Tvarkingai surašytos visų registrų reikšmės. Kad tą pasiekti "nuo nulio", tektų kelias valandas įdėmiai skaityti duomlapį. O kai jau surašyta, niekas netrukdo greitai susirasti kiekvieno registro aprašymą ir keisti savo nuožiūra. Juk pradedantieji ir su WINAVR pavyzdžiais gi dirba panašiai,- studijuoja kiekvieną eilutę ir spėlioja, kaip čia kas dirba. Čia gi tą kodą gauni dėliodamas varneles kodų generatoriuje, konfigūruodamas mikrovaldiklį.
Kodas:
#include <tiny2313.h>
// 1 Wire Bus interface functions
#include <1wire.h>
// DS1820 Temperature Sensor functions
#include <ds1820.h>
// Standard Input/Output functions
#include <stdio.h>
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x89;
// Place your code here
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 56000
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x06;
UBRRH=0x00;
UBRRL=0x08;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
DIDR=0x00;
// 1 Wire Bus initialization
// 1 Wire Data port: PORTD
// 1 Wire Data bit: 2
// Note: 1 Wire port settings must be specified in the
// Project|Configure|C Compiler|Libraries|1 Wire IDE menu.
w1_init();
Taip, čia kalba apie IDE. Nepykit, bet panašu kad kritika codevision atžvilgiu kyla dažniausiai spontaniškai, net turbūt nepabandžius Pateiksiu ant greitųjų sustumtą kodų generatoriaus programos ruošinį. Manau kodo "šlamšto" ten išvis nėra. Komentarai nesiskaito O "tobulėjimui" - pilna vietos, už kiekvieno "// Place your code here". Tvarkingai surašytos visų registrų reikšmės. Kad tą pasiekti "nuo nulio", tektų kelias valandas įdėmiai skaityti duomlapį. O kai jau surašyta, niekas netrukdo greitai susirasti kiekvieno registro aprašymą ir keisti savo nuožiūra. Juk pradedantieji ir su WINAVR pavyzdžiais gi dirba panašiai,- studijuoja kiekvieną eilutę ir spėlioja, kaip čia kas dirba. Čia gi tą kodą gauni dėliodamas varneles kodų generatoriuje, konfigūruodamas mikrovaldiklį.
Kodas:
#include <tiny2313.h>
// 1 Wire Bus interface functions
#include <1wire.h>
// DS1820 Temperature Sensor functions
#include <ds1820.h>
// Standard Input/Output functions
#include <stdio.h>
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x89;
// Place your code here
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 56000
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x06;
UBRRH=0x00;
UBRRL=0x08;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
DIDR=0x00;
// 1 Wire Bus initialization
// 1 Wire Data port: PORTD
// 1 Wire Data bit: 2
// Note: 1 Wire port settings must be specified in the
// Project|Configure|C Compiler|Libraries|1 Wire IDE menu.
w1_init();
Kas man labiausiai ant CodeVisionAVR patinka tai kad ten yra labai didele biblioteka. O ant AVR studio reikia ieskoti jau po visa interneta ir man tai kartais uzima nemazai laiko.
Tokios eilutes kaip
DDRB=0x02;
jau vadinasi slamštas, nes vizualiai reikia spelioti kokie pinai yra naudojami.
jei peziuresi i normalesnius pavyzdzius tia bus parasyta:
DDRB |= (1<<PD1);
Mano galva kodo generatorius nebent norint pamirgseti koki LED. Rašant normalesnes programas kiekvieno modulio inicializavimas turetu buti vykdomas per funkcijas ir skaidant i atskirus failus ir pan.
O šiaip aš nieko prieš ta codevision - trukumas kad mokama.
Tokios eilutes kaip
DDRB=0x02;
jau vadinasi slamštas, nes vizualiai reikia spelioti kokie pinai yra naudojami.
as nesutinku su situo pasisakymu. Pats megstu naudoti sesiolikainius skaicius ir jei ipranti tai pakankamai vaizdu ir greita. Jei reikia ijungti tarkim 8 bitu registro 6 ar 7 bitus tai rasinet 1<<XYZ tampa jau mechaniniu darbu.
Tokios eilutes kaip
DDRB=0x02;
jau vadinasi slamštas, nes vizualiai reikia spelioti kokie pinai yra naudojami.
as nesutinku su situo pasisakymu. Pats megstu naudoti sesiolikainius skaicius ir jei ipranti tai pakankamai vaizdu ir greita. Jei reikia ijungti tarkim 8 bitu registro 6 ar 7 bitus tai rasinet 1<<XYZ tampa jau mechaniniu darbu.
Pritariu, reikia ismokt skaityt sesioliktainius skaicius.
DDRB=0x02 :
"barmene, sustatykite 8 tuščius bokalus, įpilkite į antrą iš dešinės alaus ir paduokite jį man."
DDRB |= (1<<PD1) :
"barmene, sustatykite 8 tuščius bokalus, įpilkite į pirmąjį iš dešinės alaus. Paskui pristatykite iš dešinės dar vieną tuščią bokalą, perstumkite visus bokalus per vieną poziciją kairėn, ir paduokite tą bokalą, kuris tapo antru iš dešinės"
Na tai dabar pasakykit kuri eilute aiškesne?
//enable reception and RC complete interrupt
UCSR0B |= (1<<RXEN0)|(1<<RXCIE0);
Ar
UCSR0B = 0x18;
Beje nustatant bitus registre turetu buti naudojama OR operacija
UCSR0B |= 0x18;
Mano galva su tokiu trumpu užrasymu teks dažniau žvilgčioti datasheet ir žiūrėti kurie bitai nustatyti.
Paimkit bet koki tutoriala - pamatysit.
Bet, kaip sakoma, programuokit kaip norit, tačiau ilgainiui atsimušit i siena del tingėjimo parašyti aiškesnį kodą.
P.S. Aš ir nesakiau kad šešioliktainiai skaičiai yra blogai - juos reikia mokėti.
DDRB=0x02 :
"barmene, sustatykite 8 tuščius bokalus, įpilkite į antrą iš dešinės alaus ir paduokite jį man."
DDRB |= (1<<PD1) :
"barmene, sustatykite 8 tuščius bokalus, įpilkite į pirmąjį iš dešinės alaus. Paskui pristatykite iš dešinės dar vieną tuščią bokalą, perstumkite visus bokalus per vieną poziciją kairėn, ir paduokite tą bokalą, kuris tapo antru iš dešinės"
Teisingiau būtų:
DDRB=0x02 :
"barmene, išpilkite iš visų 8 bokalų nesvarbu kad ir kas ten būtų iš kas iš jų geria ir įpilkite į antrą iš dešinės alaus ir paduokite jį man."
DDRB |= (1<<PD1) :
"barmene, sustatykite atskirai 8 tuščius bokalus, įpilkite į pirmąjį iš dešinės alaus. Paskui pristatykite iš dešinės dar vieną tuščią bokalą, perstumkite visus bokalus per vieną poziciją kairėn, pakeiskite visus tuščius bokalus su chebros bokalais, ir paduokite tą bokalą, kuris tapo antru iš dešinės"