회원가입 ID/PW 찾기

마이크로프로세서 HOTpwm 출력

바다새2010.03.24 13:3503.24조회 수 2090댓글 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
번호 분류 제목 글쓴이 조회 수 날짜
492 마이크로프로세서 HOT8051 에 마이크로 C/os 포팅하려는데요1 나는타조 9740 2010.04.01
491 마이크로프로세서 HOT80511 밀향 985 2010.04.01
490 마이크로프로세서 HOT길이가 다른 문자열 비교하는 방법?2 소스리 1285 2010.04.01
489 펌웨어 & 코딩언어 HOTzigbee 통신 프로그램 질문입니다!!5 소울 2442 2010.04.01
488 마이크로프로세서 HOTALL--11P32 그런건가 1025 2010.03.31
487 마이크로프로세서 HOT도트 매트릭스...2 배추배추배추 705 2010.03.30
486 Software & IDEs HOTVisual C++ 6.0 프로그램이 비스타 작동 안하나요?6 fairlady 1291 2010.03.30
485 마이크로프로세서 HOTproteus isis쓰시는분 도와주세요1 kusum 1903 2010.03.30
484 Software & IDEs HOT안녕하세요 혹시 소스나 이전에 프로그래밍되있는것을 찾을곳이있을까요?3 꿀이 887 2010.03.30
483 Software & IDEs HOT초보에게 추천해주실 트레이닝 키트와 서적부탁드릴게요4 꿀이 916 2010.03.29
482 머신러닝, AI & 알고리즘 HOT오목 게임 알고리즘3 새로운하늘 3457 2010.03.29
481 마이크로프로세서 HOT8051 완전 초보입니다....6 새로운하늘 1082 2010.03.29
480 마이크로프로세서 HOT간접지정방식알려주시겠어요?1 개똥껄레 1246 2010.03.28
479 마이크로프로세서 HOT아트메가128를 이용한 도트매트릭스6 걍봐줭 2078 2010.03.27
마이크로프로세서 HOTpwm 출력6 바다새 2090 2010.03.24
477 펌웨어 & 코딩언어 HOT비쥬얼 스튜디오 6.0에 관해서..3 꿇단지 1060 2010.03.24
476 Software & IDEs HOT저기 레포트점 도와주세요1 메리짱 777 2010.03.22
475 마이크로프로세서 HOT안녕하세요. 8051자료 구할 수 있는 방법에 대해(- -) (_ _)4 카일 1015 2010.03.22
474 마이크로프로세서 HOTavr atmega128 공부중인데요10 짱백 1148 2010.03.20
473 마이크로프로세서 HOTDAC0800을 사용해 0~5V의 아날로그값을 얻고싶습니다. 조언구합니다. 어쩌라고 3628 2010.03.20
Prev 1 ... 29 30 31 32 33 34 35 36 37 38 ... 58 Next
  • 청년기는 대실수이다. 장년기는 투쟁이다. 그리고 노년기는 후회이다.
    - 디즈레일리
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.