Dzień dobry. Pracuję nad kodem na ATtiny167 i nie mogę włączyć PWMa sterowanego przy użyciu timera programowego opartego na timer0.
[ panie ... słuchaj pan - jesteś na naszym forum już od 2013 roku - a w taki sposób wstawiasz kod na forum??? no sorki ale zgroza - proszę natychmiast poprawić zgodnie z instrukcją: topic7402.html
poza tym - jesteś na naszym forum i dalej pomimo moich ciągłych CZERWONYCH uwag wpisujesz w kodzie programu NAWET w kocim Atmel Studio - #define F_CPU ??? !!! ... proszę żeby mi to było na tym forum po raz ostatni - chcesz? to sobie w kodzie sam to wpisuj i się katuj i będziesz miał przez to babole ... ale na forum to już zakazane - ok ? - mirekk36 ]Cytuj:
//plik main.c
#define F_CPU 8000000ul <----- proszę to WYKASOWAĆ tego NIGDY nie robi się w kodzie
#include <util/delay.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include "LEDs.h"
uint8_t x, y, z;
volatile uint8_t cnt=0;
int main(void)
{
InitLEDs();
TIM_Config();
sei();
while(1)
{
x=(x+1)%255;
y=(y+2)%255;
z=(z+4)%255;
_delay_ms(10);
}
ISR(TIMER0_OVF_vect){
cnt++;
if (cnt>x)
LED_X_ON;
if (cnt>y)
LED_Y_ON;
if (cnt>z)
LED_Z_ON;
if(0==cnt){
LED_X_OFF;
LED_Y_OFF;
LED_Z_OFF;
}
}
//****************************************************
//plik LEDs.c
void InitLEDs(void)
{
DDRB |= PIN_LED_X|PIN_LED_Y | PIN_LED_Z; //set diodes as output
}
void TIM_Config(void)
{
TCCR0A &= ~(COM0A1 | COM0A0); //normal port operation
TCCR0A &= ~(WGM01 | WGM00);
TCCR0B |= (1 << CS02 | 1 << CS01); //prescaler 256 => 8MHz/256=32kHz
TCNT0 = 0;
}
//*******************************************************************************
//plik LEDs.h
#define PORT_LED (PORTB)
#define PIN_LED_X (1<<PB3) //D1 PWM2
#define LED_X_ON (PORT_LED |= PIN_LED_X)
#define LED_X_OFF (PORT_LED &= ~PIN_LED_X)
#define LED_X_TOGG (PORT_LED ^= PIN_LED_X)
#define PIN_LED_Y (1<<PB4) //D2 PWM3
#define LED_Y_ON (PORT_LED |= PIN_LED_Y)
#define LED_Y_OFF (PORT_LED &= ~PIN_LED_Y)
#define LED_Y_TOGG (PORT_LED ^= PIN_LED_Y)
#define PIN_LED_Z (1<<PB1) //D3 PWM1
#define LED_Z_ON (PORT_LED |= PIN_LED_Z)
#define LED_Z_OFF (PORT_LED &= ~PIN_LED_Z)
#define LED_Z_TOGG (PORT_LED ^= PIN_LED_Z)
void InitLEDs(void);
void TIM_Config(void);
Kod się kompiluje ale na wyjściu gdzie są LEDy cały czas jest potencjał masy. Ma ktoś pomysł co może być źle?
Program napisany w Atmel Studio 6.1.