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
}
}