Gast
#3777168
Hi zusammen
Ums kurz zu machen:
Ich bin gerade dran einen Motor anzusteuern mit dem Fast-PWM-Mode
(ATTiny4313) vom Timer0. Leider funktioniert nur Ausgang OC0A und OC0B
bleibt immer LOW, egal welcher Wert. Als ich dachte, ich hätte einen
falschen PIN verwendet, habe ich Datenblatt nochmals geschaut. (Anhang,
Datenblatt Seite 2 und 68)
Seh ich nicht richtig, oder ist PD5 jeweils einmal mit OC0B und mit OC1B
angeschrieben? Dies würde nämlich auch erklären, wieso mein Ausgang PD5
keinen Wank macht.
Zur Sicherheit trozdem noch der Code:
#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>
#include <avr/interrupt.h>
//define LEER PA0
//define LEER PA1
//define RESET PA2
#define ENABLE_decoder PB0 //Low=enable
#define STOP PB1 //High=stop
#define MOTOR1 PB2
//define LEER PB3
#define DATA PB4
#define CLK PB5
#define EN1 PB6 //PCINT6
#define EN2 PB7
#define OUT0 PD0
#define OUT1 PD1
#define OUT2 PD2
#define OUT3 PD3
#define OUT4 PD4
#define MOTOR2 PD5
#define DIREC PD6
int main(void)
{
//Pin Konfiguration
DDRA = 0;
DDRB |= (1<<EN2) | (1<<MOTOR1);
DDRD |= (1<<MOTOR2);
//Ausgänge und Pull-pus einstellen
PORTB |= (1<<CLK) | (1<<EN1) | (1<<EN2) | (1<<STOP) |
(1<<ENABLE_decoder);
//Motorsteuerung
TCCR0A |= (1<<COM0A1) | (1<<COM0A0) | (1<<COM0B1) | (1<<COM0B0) |
(1<<WGM01) | (1<<WGM00);
TCCR0B |= (1<<WGM02) | (1<<CS02) | (1<<CS00); //prescaler 1024
OCR0A = 0;
OCR0B = 0;
//Interrupt Einstellungen
PCMSK |= (1<<PCINT6);
GIMSK |= (1<<PCIE);
TCCR1B |= (1<<CS12) | (1<<WGM12); //prescaler 256
OCR1A = 1000;
TIMSK |= (1<<OCIE1A);
for(time=0;time<1000000;time++) {}
OCR0B = 20;
for (time=0;time<500000;time++) {}
OCR0B = 0;
while(1) {}
}
Ich bin zurzeit gerade etwas am basteln an diesem Code, aber das ist
momentan alles, was man sehen muss (Interrupts sind momentan
ausgeschaltet). Ersetze ich jetzt OCR0B durch OCR0A funktioniert PB2 wie
er sollte.
Wer weiss weiter??? :(
lg Sven

