BASIC4MCU | 질문게시판 | atmega128 코드질문드려요
페이지 정보
작성자 atmegaga 작성일2018-12-20 21:23 조회41,510회 댓글8건본문
#define F_CPU 7372800UL // 7.3728 MHz
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
//
signed char mot_cnt=0,val=0;
//
unsigned char FND_DATA_TBL[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x67,0x77,0x7C,0x39,0x5E,0x79,0x71,0x08,0x80};
unsigned char MOTOR[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //1-2상 여자
volatile char direction = 1;//
ISR(TIMER0_COMP_vect){ // 22.2ms
//
if((PIND&1)==0){ // sw0
direction ++;
if(--mot_cnt<0)mot_cnt=7; // Rightif(++val>7)val=0; // FND 증가
PORTB=0xFF; // LED on
PORTE=0x08; // Buzzer on
PORTF = FND_DATA_TBL[val];
PORTC=MOTOR[mot_cnt];}
//if((PIND&2)==0){ // sw1
direction --;if(++mot_cnt>7)mot_cnt=0; // left
if(--val<0)val=7; // FND 감소
PORTB=0x00; // LED off
PORTE=0x00; // Buzzer off
val -= direction;
}
PORTF = FND_DATA_TBL[val];
PORTC=MOTOR[mot_cnt];
}//
int main(){
DDRF=0xFF; // FND
DDRB=0xFF; // LED
DDRC=0x0F; // STEP MOTORDDRE=0x08; // Buzzer on
TCCR0=0x0F; OCR0=159; TIMSK=2; // 7372800/1024/160=45Hz=22.2ms
SREG=0x80;
while(1);
}
한백mcu멀티키트로 코딩연습중입니다. 앞전에 코드수정해주신걸로 이것저것 해보고있는데
스위치 0을 누르면 모터가 우측으로 정방향, 1을 누르면 좌측으로 역방향되면서 LED에 불이 켜지고
부저가 울리는 소스인데요 저기서 정회전시 FND 숫자가 올라가고 역회전이 기존소스+FND숫자가 내려가는 소스를 해보려고 수정에 수정을 거듭했는데 FND 가 제대로 안떠요 오른쪽 왼쪽 누르면 부저와 LED는 다 작동이되는데 FND 숫자가 제대로 안보이네요;
댓글 8
조회수 41,510master님의 댓글
master 작성일
퓨즈비트 설정에서 JTAG가 체크되어 있는 경우에는 PF4~PF7이 JTAG로 할당 되기 때문에 다른 용도로 사용하지 못합니다.
JTAG 사용하지 않는다면 JTAG 체크를 해제하세요
atmegaga님의 댓글
atmegaga
FND가 이제 선명하게 뜨긴하는데 모터와 FND 회전수가 맞는지 안맞는지 둘다 너무 빨라서
잘모르겠네요 모터회전수는 0CR0로 맞추는건 되는데 FND도 같이 맞추려면
delay를 넣어야 할까요?
master님의 댓글
master
mot_cnt와 val는
증가와 감소로 서로 다르자나요?
애당초 질문이 증가 감소가 다르게 하겠다고 했었죠
master님의 댓글
master 작성일
if(++val>7)val=0; // FND 증가
if(--val<0)val=7; // FND 감소
위 코드 삭제하고
PORTF = FND_DATA_TBL[mot_cnt]; // mot_cnt를 출력하세요
atmegaga님의 댓글
atmegaga 작성일
해당 소스 지웠는데 FND는 더욱 선명해진거 확인했구요 속도에는 변화가 전혀 없어요 ㅠㅠ
그리고 sw0을 계속 누르면 숫자가 9로 갔다가 다시 0으로 오는데 9 즉 최고숫자에서 더이상 안올라가게할수도있나요?
master님의 댓글
master
SW0 과 SW1 은 속도를 내리고 올리는 것이 아니고
SW0 누르고 있는 동안 역회전
SW1 누르고 있는 동안 정회전
이런식으로 구동되고 있는 겁니다.
속도를 변화시키려면 스위치를 추가해야 합니다.
atmegaga님의 댓글
atmegaga 작성일그럼 정회전일떄 숫자증가가 9에서 더이상 안올라가게 설정하고 역회전시 0에서 더이상 안내려가게 하는건 스위치 말고 못하나요?
master님의 댓글
master
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=7154