회원가입 ID/PW 찾기

마이크로프로세서 HOTpwm 출력

바다새2010.03.24 13:3503.24조회 수 2095댓글 6이 게시물을

AA

portb로 8port 전부 pwm 출력을 하고자 하는데 뭐가 틀렸는지 모르겠습니다.

아래 소스는 본 홈페이지 어느 분이 짜신건데 제가 활용해봤습니다.

죄송합니다. 뭔가 수고비를 바라신다면 댓가를 지불할 의향도 있습니다.

한번 봐주세요. 저 왕초보입니다. 죽겠습니다...ㅠㅠ

개발 환경은 AVR Studio Atmega128 GCC입니다.

#include<avr/io.h>
#include<avr/interrupt.h>

int int_cmd;

void PORT_init(void)
{
  DDRB=0xFF;
  PORTB=0xFF;
}

SIGNAL(TIMER0_COMP_vect)
{
 int_cmd++;
 if(int_cmd>>250){
   //int_cmd=0;
   PORTB=0x00;
   }
  else if(int_cmd>>500){
   PORTB=0xFF;
   int_cmd=0;
   }
}

void PWM_init(void)
{
  TCCR3A = 0x22;                                // Fast PWM mode(14), output OC3B
  TCCR3B = 0x19;                                // Fpwm = 16MHz/1/(1+1599) = 10kHz
  TCCR3C = 0x00;
  ICR3H = (1599 >> 8);
  ICR3L = 1599 & 0xFF;
  OCR3BH = 0x00;
  OCR3BL = 0x00;
  TCNT3H = 0x00;
  TCNT3L = 0x00;


  sei();

}
int main(void)
{
  PORT_init();
  PWM_init();
 
  while(1){  

   }
}

 

댓글 6
  • 음 세세히 안봐서 자세한건 모르겠고.. 인터럽트 구문에서 비교하는게 이상해요.
    >> 이거 쉬프트 연산자니까 틀렸고..
    순서가 int_cmd가 0부터 증가한다고 하면 만족하는게 없습니다.
    즉, int_cmd 가 100까지는 0이고 200까지는 1로 하고 싶다면

    if(int_cmd<100)
    {
       PORTB=0x00;
    }
    else
    {
       PORTB=0xFF;
    }

    int_cmd++;
    if ( int_cmd > 200 ) int_cmd = 0 ;

    이렇게 하면 되구요.

    int int_cmd;
    전역 변수가 초기화 되는걸로 아는데.. 혹시 모르니 int int_cmd = 0 ;
    하세요.

    그냥 문법상 틀려서 지적해 봅니다.

    안되면 세세히봐야 겠네요. ^^

  • No Profile
    글쓴이 바다새 10.03.24 15:51 댓글 좋아요 0 싫어요 0

    안되네요...이 프로그램 PORTB로 8포트 전부 PWM 출력 되는거 맞나요???ㅠㅠ

  • 음.. 좀더 보니.. 여러 프로그램 같다 붙이신거 같네요 ^.^;;

    걍  pwm 처럼 파형 나오는것만 원하신다면 저녁에 하나 짜드릴께요. 새벽쯤? ^.^

    TCCR3A = 0x22;                                // Fast PWM mode(14), output OC3B
      TCCR3B = 0x19;                                // Fpwm = 16MHz/1/(1+1599) = 10kHz

    이게 맞다면 output OC3B 에 pwm 출력하는 프로그램 입니다.
    SIGNAL(TIMER0_COMP_vect)
    이렇게 해서 쓰시길 원한다면 타이머 오버플로 인터럽트로 기준 시간 만들어서 하면 pwm 비슷하게 구현 가능합니다.

  • 대충 아래와 같아요. 전 코드비전 쓰니까 인터럽트 쪽만 "ISR(TIMER0_OVF_vect)" 으로 바꾸면 될듯 하네요.
    음 확인은 안해봤지만 개념은 아래와 같아요. 대충 했기에 정확하진 않지만요.
    그리고 8포트 전부 PWM 기능 없습니다. 수동으로 만들어야 해요. 마이컴 내부 pwm 을 사용하고 싶다면
    레지스터 설정만 해 주면 거기에 해당하는 포트들만 가능합니다.
    수고하세요.


    // Timer 0 overflow interrupt service routine

    // 7.813Khz 이니까 TCNT0 하나당 1/7813 s 가 됩니다.
    // 그리고 업카운터니까 256-100 을 하면 100번 카운터 된다음 인터럽트가 걸립니다.
    // 따라서 인터럽트에 들어갈때의 시간은 1/7813*100 = 0.01279918 s 가 됩니다.

    // 그리고 20Hz 의 파형을 만들고 싶다면 0.025s(high) , 0.025s(low) 이니까
    // 아래와 같습니다.

    unsigned int count = 0 ;
    char flag = 0 ;

    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
        TCNT0=256-100;
       
        count++ ;
       
        if ( count >= 2 )       // 0.025s (약)
        {
            count = 0 ;
           
            if ( flag ) flag = 0 ;
            else flag = 1 ;
        }
       
        if ( flag )
        {
            PORTB = 0xFF ;
        }
        else
        {
            PORTB = 0x00 ;
        }
        
    }


    void Init ()
    {
        // Timer/Counter 0 initialization
        // Clock source: System Clock
        // Clock value: 7.813 kHz
        // Mode: Normal top=FFh
        // OC0 output: Disconnected
        ASSR=0x00;
        TCCR0=0x07;
        TCNT0=256-100;            
        OCR0=0x00;
    }

  • No Profile
    글쓴이 바다새 10.03.25 09:06 댓글 좋아요 0 싫어요 0

    감사합니다.(__) 그런데 잘 안되네요...에혀...죽겠다...ㅠㅠ 아예 avr studio에서 어떻게 코드를 적어야 되는지 full로 적어 주셔요...저 한개도 몰라요...휴...죄송합니다...(__)

  • No Profile
    이런 말 하기는 좀 그렇네요 pwn파형은 시간당 얼마나 전압은 보내냐가 아닙니까?
    위와 같은 방법도 있겠지만 다른 방법으로 생각하면 디렐이 함수을 사용하여 그 파형을 만들어 내면 되지 않겠습니까?

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
66 펌웨어 & 코딩언어 HOT텍트로닉스(tektronix) 오실로스코프 질문드려요~~1 파괴지왕 1168 2010.06.24
65 펌웨어 & 코딩언어 HOTspice 프로그램을 만들고 싶습니다1 TreeOfDream 977 2010.06.21
64 펌웨어 & 코딩언어 HOTC언어 초보에요 ㅠㅠ 이쪽부분 간소화할려고하는데..조언좀..11 다크소마 1448 2010.06.19
63 펌웨어 & 코딩언어 HOTMFC 를 공부중입니다 API를 시작해야 하는데..3 TreeOfDream 1122 2010.06.11
62 펌웨어 & 코딩언어 HOT펌웨어 엔지니어입니다. 윈도우응용프로그램 MFC하고싶은데...6 상하이찬 1568 2010.06.02
61 펌웨어 & 코딩언어 HOT리눅스 기반 어셈블리어 작성했는데 자꾸 'command not found'라 뜨네요......2 하늘위의 성 1407 2010.05.30
60 펌웨어 & 코딩언어 HOT코드비젼 소스 설명좀 부탁드립니다 ㅠㅠ1 vsvm 2188 2010.05.24
59 펌웨어 & 코딩언어 HOT맥스포사의 mtm-cm3000 으로 리모콘 모듈이 조종 가능한가요? 철방이 880 2010.05.11
58 펌웨어 & 코딩언어 HOT코드비젼으로 컴파일해봤습니다...도움좀 주세요.4 푸후 1216 2010.05.04
57 펌웨어 & 코딩언어 HOT다시 작성합니다. MSDN 도움말 문제입니다. TreeOfDream 882 2010.04.29
56 펌웨어 & 코딩언어 HOT어셈블 도와주세요 ㅠㅠ1 마왕님 1029 2010.04.26
55 펌웨어 & 코딩언어 HOT왕초보 c언어 질문이요11 hshyo 1052 2010.04.19
54 펌웨어 & 코딩언어 HOT마이컴 제어하는 C언어 학습이 어디까지 이루어져야 할까요?8 봄날 1432 2010.04.17
53 펌웨어 & 코딩언어 HOT액세스 지정자에 대해서 궁금한 점이 있습니다. TreeOfDream 902 2010.04.17
52 펌웨어 & 코딩언어 HOT조이스틱 관련 Firmware,Driver 관련 조언 부탁드립니다.2 루키키 1092 2010.04.14
51 펌웨어 & 코딩언어 HOTc언어 배우려는 초보입니다.9 빛의속도 1026 2010.04.09
50 펌웨어 & 코딩언어 HOTzigbee 통신 프로그램 질문입니다!!5 소울 2450 2010.04.01
49 펌웨어 & 코딩언어 HOT비쥬얼 스튜디오 6.0에 관해서..3 꿇단지 1060 2010.03.24
48 펌웨어 & 코딩언어 HOTc언어 왕초보입니다. 좋은책 추천좀 해주세요10 circuit 1295 2010.03.15
47 펌웨어 & 코딩언어 HOT8051과 일반 C와 많이 차이나나요?5 개똥껄레 1097 2010.02.20
  • 나의 음악은 어린아이들과 동물들이 가장 잘 이해한다.
    - 스트라빈스키
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.