 |
Forumas » Mikrovaldikliai » atmega16 ir ledu valdymas
|
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
|
|
|
 |
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 26, 15:55 |
|
|
|
Sveiki. Jau kuri laika zaidziu su atmega ir ledais, bandau perprast mikrokontroleriu programavima.
Taigi dabar man iskilo toks klausimas i kuri niekaip negaliu atsakymo rast. Noriu padaryt paprasta beganciu 8 ledu eilute, bet kad pvz pirmas begantis degtu visu pajegumu, o antras butu siek tiek isblukes, tarsi atsirastu uzdelesimo efektas. Niekaip nesugalvoju kaip padaryt kad 2 led degtu vienu metu, taciau netokiu pat ryskumu. Gal cia reikia PWM naudot, bet juk jis turi nedaug isejimu, nebutu beganti eilute. Kad vienas ar du ledai pulsuotu moku padaryt su PWM, bet kaip padaryt tokia begancia eilute net neisivaizduoju. Turbut ant kiekvieno ledo po kondika gera uzmetus gautusi panasus efektas, tik tada ir uzsidegtu su lagu
Nevarykit labai, as dar zalias siuos reikaluos Aciu is anksto uz idejas. |
|
|
|
|
 |
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 26, 16:17 |
|
|
|
kas neleidzia susikurti savo pvm tiek, kiek nori? panaudoji taimeri -tai bus periodas... Jame suki skaitikli... Pradzioje ijungi visus diodus. Toliau rasai case 0:, case1 : case 2: ir t.t iki ciklo galo... Prie kiekvieno case-isjungi atitinkama dioda ir kuo anksciau isjungi-tuo silpniau sviecia... |
|
_________________ Nieko taip lengvai nedaliname, kaip patarimus... |
|
|
|
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 26, 22:28 |
|
|
|
Sveiki, man taip pat panasi problema iskilo. Caca viena kart padejei,gali dar karta padeti - problema tokia, kad man reikia,kad 8 lydai vienu metu galetu mirkset skirtingu daznumu (ne vienas lydas, bet visi 8 is karto mirksetu skirtingai). Viska ka zinojau isbandziau ir vistiek nesigauna. Kaip uzrasyti programa,kad gautusi taip? |
|
|
|
|
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 27, 00:01 |
|
|
|
taftas14:
galima kazka tokio daryti
Kodas: |
...
while(1){
for(a=0; a<20;a++){
if ((a>0)&(a<10)) PORTB.0=1; else PORTB.0=0;
if ((a>5)&(a<7)) PORTB.1=1; else PORTB.1=0;
if ((a>0)&(a<10)) PORTB.2=1; else PORTB.2=0;
if ((a>15)&(a<20)) PORTB.3=1; else PORTB.3=0;
...
delay_ms(..);
}
}
.. |
|
|
_________________ Teorija - kai viską žinai, bet niekas neveikia,
Praktika - kai viskas veikia, bet nežinai kodėl.
Skype : VytautasRX |
|
|
|
 |
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 27, 08:17 |
|
|
|
kad mirksetu skirtingais dazniais algoritmas turetu buti toks: rasai cikla... cikle rasai pvz case 0:, case1 ir t.t. iki ciklo galo... sakysim ciklas yra 100... Tai viena sviesos dioda ijungi prie case 0, o isjungi prie case 1; Per cikla turesi viena ijungima... Kita dioda pvz ijungi prie case 0 ir pvz case 50... o isjungi prie case 1 ir case 51... Turesi du mirktelejimus per cikla . sekanti ijungineji tris kartus ir t.t. Kol nusibos...  |
|
_________________ Nieko taip lengvai nedaliname, kaip patarimus... |
|
|
|
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 27, 09:39 |
|
|
|
O sita, caca gali imesti pavizdziu, kur irasyti ta case komandas,nes kai irasau man meta klaidas-gal ne ten kur irasau. |
|
|
|
|
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 27, 17:28 |
|
|
|
for(ciklas=0;ciklas<100;ciklas++)
{
switch(ciklas)
{
case 0:{SET_LED1,SET_LED2; ir t.t.break;}
case 1:{RES_LED1; ............. break;}
ir t.t.
case 100:{...... break;}
}
} |
|
_________________ Nieko taip lengvai nedaliname, kaip patarimus... |
|
|
|
 |
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 27, 17:46 |
|
|
|
0 iki 3 ryškumo lygių beganti eilutė
Kodas: |
//*** IAR 4 MHz AVR, mega16, Ledai ant portA **********
#include <ioavr.h>
#include <intrinsics.h>
#define sbi(PORT,BIT) (PORT |= (1<<BIT))
#define cbi(PORT,BIT) (PORT &= ~(1<<BIT))
//************************************************
__flash unsigned char mas[28][8]={
//
{0,0,0,0,0,0,0,0}, //1
{0,0,0,0,0,0,0,0},
{3,0,0,0,0,0,0,0},
{2,3,0,0,0,0,0,0},
{1,2,3,0,0,0,0,0},
{1,1,2,3,0,0,0,0},
{1,1,1,2,3,0,0,0},
{0,1,1,1,2,3,0,0},
{0,0,1,1,1,2,3,0},
{0,0,0,1,1,1,2,3},
{0,0,0,0,1,1,1,2},
{0,0,0,0,0,1,1,1},
{0,0,0,0,0,0,1,1},
{0,0,0,0,0,0,0,1},
//
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,3},
{0,0,0,0,0,0,3,2},
{0,0,0,0,0,3,2,1},
{0,0,0,0,3,2,1,1},
{0,0,0,3,2,1,1,1},
{0,0,3,2,1,1,1,0},
{0,3,2,1,1,1,0,0},
{3,2,1,1,1,0,0,0},
{2,1,1,1,0,0,0,0},
{1,1,1,0,0,0,0,0},
{1,1,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0}, //28
};
//************************************************
int pwm(int sk, unsigned char y){
int i, disp, n;
for(i=0; i<8; i++){
n = mas[y][i] - sk;
disp = disp >> 1;
if(n <= 0){
cbi(disp, 7);
}else{
sbi(disp, 7);
}
}
return disp;
}
//************************************************
void display(unsigned char EilNr, unsigned char count){
unsigned char i;
for(i=0; i<count; i++){
PORTA = pwm(0, EilNr);
__delay_cycles(1024);
PORTA = pwm(1, EilNr);
__delay_cycles(6500);
PORTA = pwm(2, EilNr);
__delay_cycles(14336);
PORTA = 0x00;
__delay_cycles(2048);
}
}
//************************************************
void main( void ){
unsigned char i;
DDRA = 0xFF;
while(1){
for(i=0; i<28; i++){
display(i, 20);
}
}
}
|
čia toks nelabai kokybiškas filmukas kaip veikia šita prog. |
|
|
|
|
 |
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 28, 01:04 |
|
|
|
Ačiū, centronic, būtent to ir ieškojau Biški pakeičiau tavo koda (visgi open source ) , kad mano akiai būtų gražiau, beto kažko neleido i flasha rašyt masyvo. Taip pat naudoju avr-gcc, ne IAR compilerį. Sekmės
Kodas: |
//*** 4 MHz AVR, mega16, Ledai ant portD **********
#include <avr/io.h>
#include <util/delay.h>
#define sbi(PORT,BIT) (PORT |= (1<<BIT))
#define cbi(PORT,BIT) (PORT &= ~(1<<BIT))
//************************************************
unsigned char mas[20][8]={
//
//1
{3,0,0,0,0,0,0,0},
{2,3,0,0,0,0,0,0},
{1,2,3,0,0,0,0,0},
{0,1,2,3,0,0,0,0},
{0,0,1,2,3,0,0,0},
{0,0,0,1,2,3,0,0},
{0,0,0,0,1,2,3,0},
{0,0,0,0,0,1,2,3},
{0,0,0,0,0,0,1,3},
{0,0,0,0,0,0,0,3},
//
{0,0,0,0,0,0,0,3},
{0,0,0,0,0,0,3,2},
{0,0,0,0,0,3,2,1},
{0,0,0,0,3,2,1,0},
{0,0,0,3,2,1,0,0},
{0,0,3,2,1,0,0,0},
{0,3,2,1,0,0,0,0},
{3,2,1,0,0,0,0,0},
{3,1,0,0,0,0,0,0},
{3,0,0,0,0,0,0,0},
//20
};
//************************************************
int pwm(int sk, unsigned char y){
int i, disp, n;
for(i=0; i<8; i++){
n = mas [y][i] - sk;
disp = disp >> 1;
if(n <= 0){
cbi(disp, 7);
}else{
sbi(disp, 7);
}
}
return disp;
}
//************************************************
void display(unsigned char EilNr, unsigned char count){
unsigned char i;
for(i=0; i<count; i++){
PORTD = pwm(0, EilNr);
_delay_loop_2(256);
PORTD = pwm(1, EilNr);
_delay_loop_2(1625);
PORTD = pwm(2, EilNr);
_delay_loop_2(2084);
PORTD = 0x00;
_delay_loop_2(10);
}
}
//************************************************
void main( void ){
unsigned char i;
DDRD = 0xFF;
while(1){
for(i=0; i<20; i++){
display(i, 20);
}
}
} |
|
|
|
|
|
 |
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 28, 20:04 |
|
|
|
biški patobulinta, dabar nuo 0 iki 8 lygių
Kodas: |
//*** IAR, 4 MHz, AVR, mega16, LED portA *********
#include <ioavr.h>
#include <intrinsics.h>
//#include "../_ManoLIB/delay.h"
#define sbi(PORT,BIT) (PORT |= (1<<BIT))
#define cbi(PORT,BIT) (PORT &= ~(1<<BIT))
//************************************************
__flash unsigned char mas[32][8]={
//
{0,0,0,0,0,0,0,0}, //1
{8,0,0,0,0,0,0,0},
{7,8,0,0,0,0,0,0},
{6,7,8,0,0,0,0,0},
{5,6,7,8,0,0,0,0},
{4,5,6,7,8,0,0,0},
{3,4,5,6,7,8,0,0},
{2,3,4,5,6,7,8,0},
{1,2,3,4,5,6,7,8},
{0,1,2,3,4,5,6,7},
{0,0,1,2,3,4,5,6},
{0,0,0,1,2,3,4,5},
{0,0,0,0,1,2,3,4},
{0,0,0,0,0,1,2,3},
{0,0,0,0,0,0,1,2},
{0,0,0,0,0,0,0,1},
//
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,8},
{0,0,0,0,0,0,8,7},
{0,0,0,0,0,8,7,6},
{0,0,0,0,8,7,6,5},
{0,0,0,8,7,6,5,4},
{0,0,8,7,6,5,4,3},
{0,8,7,6,5,4,3,2},
{8,7,6,5,4,3,2,1},
{7,6,5,4,3,2,1,0},
{6,5,4,3,2,1,0,0},
{5,4,3,2,1,0,0,0},
{4,3,2,1,0,0,0,0},
{3,2,1,0,0,0,0,0},
{2,1,0,0,0,0,0,0},
{1,0,0,0,0,0,0,0}, //32
};
//************************************************
int pwm(int sk, unsigned char y){
int i, disp, n;
for(i=0; i<8; i++){
n = mas[y][i] - sk;
disp = disp >> 1;
if(n <= 0){
cbi(disp, 7);
}else{
sbi(disp, 7);
}
}
return disp;
}
//************************************************
void display(unsigned char EilNr, unsigned char count){
unsigned char i, n, s;
for(i=0; i<count; i++){
for(n=0; n<8; n++){
PORTA = pwm(n, EilNr);
for(s=0; s<n+1; s++){
__delay_cycles(300);
}
}
PORTA = 0x00;
__delay_cycles(100);
}
}
//************************************************
void main( void ){
unsigned char i;
DDRA = 0xFF;
while(1){
for(i=0; i<32; i++){
display(i, 20);
}
}
}
|
|
|
|
|
|
 |
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 28, 21:43 |
|
|
|
caca rašo: |
for(ciklas=0;ciklas<100;ciklas++)
{
switch(ciklas)
{
case 0:{SET_LED1,SET_LED2; ir t.t.break;}
case 1:{RES_LED1; ............. break;}
ir t.t.
case 100:{...... break;}
}
} |
caca tikrai labai dekui, kad padedi. Meta viena iksa (klaida) prie "for(ciklas=0;ciklas<100;ciklas++)" raso build antrastej---"Error[Pe169]: expected a declaration" ka kur cia reikia darasyti, kad nemestu tos klaido? |
|
|
|
|
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 28, 23:10 |
|
|
|
taftas14 rašo: |
caca rašo: |
for(ciklas=0;ciklas<100;ciklas++)
{
switch(ciklas)
{
case 0:{SET_LED1,SET_LED2; ir t.t.break;}
case 1:{RES_LED1; ............. break;}
ir t.t.
case 100:{...... break;}
}
} |
caca tikrai labai dekui, kad padedi. Meta viena iksa (klaida) prie "for(ciklas=0;ciklas<100;ciklas++)" raso build antrastej---"Error[Pe169]: expected a declaration" ka kur cia reikia darasyti, kad nemestu tos klaido? |
for(int ciklas=0;ciklas<100;ciklas++) |
|
|
|
|
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 29, 13:29 |
|
|
|
Visvien neina man kazko kad ir taip parasau 'for(int ciklas=0;ciklas<100;ciklas++)' meta iksa raudona |
|
|
|
|
 |
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 30, 13:42 |
|
|
|
taftas14 rašo: |
Sveiki, man taip pat panasi problema iskilo. Caca viena kart padejei,gali dar karta padeti - problema tokia, kad man reikia,kad 8 lydai vienu metu galetu mirkset skirtingu daznumu (ne vienas lydas, bet visi 8 is karto mirksetu skirtingai). Viska ka zinojau isbandziau ir vistiek nesigauna. Kaip uzrasyti programa,kad gautusi taip? |
led mirksejimas paprastas pvz:
Kodas: |
//**************************************************
//******** IAR, AVR, 4MHz, led mirksejimas portA *********
//**************************************************
#define ENABLE_BIT_DEFINITIONS
#include <ioavr.h>
#include <intrinsics.h>
#define f_cpu 4000000
#define msek (f_cpu / 1000)
#define sbi(PORT,BIT) (PORT |= (1<<BIT))
#define cbi(PORT,BIT) (PORT &= ~(1<<BIT))
#define bitas(PIN,BIT) (PIN &(1 << BIT))
//*************************************************
unsigned char d0, d1, d2, d3, d4, d5, d6, d7, led;
//*************************************************
void delay_ms(unsigned int cnt){
unsigned int i;
for(i=0; i<cnt; i++){
__delay_cycles(msek);
}
}
//*************************************************
void main( void ){
DDRA = 0xFF;
PORTA = 0x00;
while(1){
d0++;
d1++;
d2++;
d3++;
d4++;
d5++;
d6++;
d7++;
//
if(d0 == 5){
d0 = 0;
if(bitas(led,0)){
cbi(led,0);
}else{
sbi(led,0);
}
}
//
if(d1 == 60){
d1 = 0;
if(bitas(led,1)){
cbi(led,1);
}else{
sbi(led,1);
}
}
//
if(d2 == 15){
d2 = 0;
if(bitas(led,2)){
cbi(led,2);
}else{
sbi(led,2);
}
}
//
if(d3 == 30){
d3 = 0;
if(bitas(led,3)){
cbi(led,3);
}else{
sbi(led,3);
}
}
//
if(d4 == 5){
d4 = 0;
if(bitas(led,4)){
cbi(led,4);
}else{
sbi(led,4);
}
}
//
if(d5 == 75){
d5 = 0;
if(bitas(led,5)){
cbi(led,5);
}else{
sbi(led,5);
}
}
//
if(d6 == 15){
d6 = 0;
if(bitas(led,6)){
cbi(led,6);
}else{
sbi(led,6);
}
}
//
if(d7 ==45){
d7 = 0;
if(bitas(led,7)){
cbi(led,7);
}else{
sbi(led,7);
}
}
//
PORTA = led;
delay_ms(10);
}
} |
kitas pvz:
Kodas: |
//**************************************************
//******** IAR, AVR, 4MHz, led mirksejimas portA *******
//**************************************************
#define ENABLE_BIT_DEFINITIONS
#include <ioavr.h>
#include <intrinsics.h>
#define f_cpu 4000000
#define msek (f_cpu / 1000)
#define sbi(PORT,BIT) (PORT |= (1<<BIT))
#define cbi(PORT,BIT) (PORT &= ~(1<<BIT))
#define bitas(PIN,BIT) (PIN &(1 << BIT))
//*************************************************
unsigned char led_1[]={5,60,15,30,5,75,15,45};
unsigned char led_2[]={0,0,0,0,0,0,0,0};
//*************************************************
void delay_ms(unsigned int cnt){
unsigned int i;
for(i=0; i<cnt; i++){
__delay_cycles(msek);
}
}
//*************************************************
void main( void ){
unsigned char i;
DDRA = 0xFF;
PORTA = 0x00;
while(1){
for(i=0; i<8; i++){
led_2[i]++;
if(led_1[i] == led_2[i]){
led_2[i] = 0;
if(bitas(led,i)){
cbi(led,i);
}else{
sbi(led,i);
}
}
}
//
PORTA = led;
delay_ms(10);
}
}
|
|
|
|
|
|
 |
 |
atmega16 ir ledu valdymas |
Parašytas: 2010 05 30, 14:42 |
|
|
|
Centronic labai tau dekui uz pvz. tikrai viskas veikia puikiai --- DIDELIS ACIŪ TAU |
|
|
|
|
|
 |
Google paieška forume |
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
 |
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
 |
Football Training Kit
Football Training Equipment,
Football Skills,
Football Training |
|