회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
256 Analog & Mixed-Signal 설계 HOTz 노이즈에 대한 개요1 베시시 2022 2010.04.06
255 전기전자 아무거나 HOTpic에서 pwm신호1 존트럭볼타 1109 2010.04.05
254 전기전자 아무거나 HOT시계 관련 소스 입니다 많은 추천 바랄게요4 일자무식 1524 2010.04.05
253 드론/로봇/라인트레이서 HOT도와주세요5 키키오오 2350 2010.04.04
252 드론/로봇/라인트레이서 HOT라인트레이서 부품선정시1 vsvm 1847 2010.04.03
251 전기전자 아무거나 HOTReed Switch2 hicharlie 1240 2010.04.02
250 전기전자 아무거나 HOT자격증 질문해도 되여?11 라인만들어보자 1089 2010.04.02
249 전기전자 아무거나 HOT어떤 트랜지스터를 사용해야하나요?5 hicharlie 1149 2010.03.30
248 전기전자 아무거나 HOT아트메가128를이용한 도트 매트릭스1 걍봐줭 1267 2010.03.27
247 전기전자 아무거나 HOT또 한가지 더...avr 습도센서말입니다...3 fm매니아 1415 2010.03.27
246 전기전자 아무거나 HOTavr 영상처리장치에 대해서...2 fm매니아 1448 2010.03.27
245 전기전자 아무거나 HOTDC모터에대해..4 vsvm 1157 2010.03.26
244 전기전자 아무거나 HOT판매용 센서 출력을 ATMEGA 입력신호값으로 사용하는 방법 알려주세요1 강산적 1188 2010.03.25
243 전기전자 아무거나 HOT양산전에 고려해야할 사항..ㅡㅡ;2 루키키 1069 2010.03.25
242 전기전자 아무거나 HOT전기과 프로그램5 흐그극 1003 2010.03.24
241 전기전자 아무거나 HOT청소년 과학경진대회 전자과학 지도4 함태경 1171 2010.03.23
240 전기전자 아무거나 HOTDC모터에대해3 vsvm 1328 2010.03.23
239 드론/로봇/라인트레이서 HOTavr atmega128 공부중인데요1 짱백 1625 2010.03.20
238 드론/로봇/라인트레이서 HOT라인트레이서..2 vsvm 1342 2010.03.19
237 전기전자 아무거나 HOT라인트레이서에대해서..2 vsvm 719 2010.03.19
Prev 1 ... 22 23 24 25 26 27 28 29 30 31 ... 39 Next
  • 사랑을 하다가 사랑을 잃은 편이 한번도 사랑하지 않은 것보다 낫다.
    - 테니슨
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.