Stránka 1 z 1

Rizene PWM joystickem

Napsal: 10 kvě 2010, 19:03
od endthe
Zdravim chtel sem udelat rizeni serva pomoci joysticku
pouzivat ATmega128 a pwm OCR3A a OCR3B

resim to takto

Kód: Vybrat vše

#define ADC_VREF_TYPE 0x40 
#define F_CPU 14745600
#include "main.h"
#include <avr/interrupt.h>
#include <avr/io.h>
#include <avr/sfr_defs.h>
#include <stdio.h>
#include <stdlib.h>
#include <avr/delay.h>
#include "delay_1ms_u16.h"

int main (void)
{

int prepocetH=90;
int prepocetL=90;
DDRE = 0x18; //povoleni portu PE3 a PE4 jako vystup PWM (OC3A a OC3B)
ICR3=18432;
TCCR3A=0xA0;
TCCR3B=0x12;     
TCNT3H=0x00;
TCNT3L=0x00;
OCR3A=1323;
OCR3B=1323;

PORTG = (1<<PG3)|(1<<PG2)|(1<<PG1)|(1<<PG0);
DDRG = (1<<DDG3)|(1<<DDG2)|(1<<DDG1)|(1<<DDG0);
PING=(1<<PING3)|(1<<PING2)|(1<<PING1)|(1<<PING0);

while(1) {
         if (bit_is_clear(PING,0)){
               prepocetH+=10;
            _delay_ms(200);
                };
         if (bit_is_clear(PING,1)){
            prepocetH-=10;
            _delay_ms(200);
              };
         if (bit_is_clear(PING,2)){
            prepocetL+=10;
            _delay_ms(200);
              };
         if (bit_is_clear(PING,3)){
            prepocetL-=10;
            _delay_ms(200);
              };
             if(prepocetH>=180) prepocetH=180; 
         if(prepocetL>=180) prepocetL=180;
         if(prepocetH<=0) prepocetH=0;
         if(prepocetL<=0) prepocetL=0;

         //prepocet uhlu na ciselnou hodnotu OCR3A
         OCR3A=525+(prepocetH*8.8888888);          //min 922 max 1842
         OCR3B=525+(prepocetL*8.8888888);          //min 922 max 1842
   }
}


ale je problem ze mi jede jen OCR3B a to druhe PWM nechce frcet poradi nekdo?

Napsal: 10 kvě 2010, 20:03
od Andrea
Opravdu ti ten procesor běží na 147 MHz?

Napsal: 10 kvě 2010, 20:49
od endthe
ne na 14,7 MHz krystalu takze tam mam o jednu 0 vic

Napsal: 11 kvě 2010, 23:16
od endthe
zprovozneno musel sem opravit napajeni serv