PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATtiny2313 prob.



Crocodile
16.12.2005, 16:23
Hallso zusammen,


Arbeite gerade mit dem ATtiny2313 V, timer macht aber nicht mit!
Folgender Code funktioniert nicht auf dem ATtiny aber auf dem Mega32.Hab den Code im AVRstudio getestet da funktioniert er mit dem 2313 irgentwie , weiss echt nicht woran es liegen kann! :-k







#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

#include <avr/delay.h>

volatile int counter = 0;

int main() {


DDRB = (1<<PB2); /*Ausgang*/
DDRB = (1<<PB1); /*Ausgang*/
DDRD |= (1<<PD6); /*Ausgang*/
TCCR1B = (1<<CS10)|(1<<CS11);/*CPU-Takt / 64*/
TIMSK = 0x84; /* Timer0 Overflow Interrupt enable*/
TCNT1 = 3036;
sei(); /* Global Enable Interrupt Flag setzen */


while(1)
{
if (counter == 1) {

PORTD |= (1<<PD6); /*High*/
PORTB = (1<<PB1); /*High*/
_delay_ms(100);
counter = 0;
}
else
{


PORTD &= ~(1<<PD6); /*low*/
PORTD &= ~(1<<PB1); /*low*/

}
}


}


SIGNAL (SIG_OVERFLOW1) /*Interrupt-Routine*/
{

counter++; /*um eins inkrementieren*/



}

PicNick
16.12.2005, 18:02
Da hats was, du mußt pb1 ODERN sonst zertrümmert er das PB2-Bit
DDRB = (1<<PB2); /*Ausgang*/
DDRB |= (1<<PB1); /*Ausgang*/

Das muß du in der ISR auch machen
TCNT1 = 3036;

Probier' mal

Crocodile
16.12.2005, 19:25
Danke erstmal für deine Hilfe, versteh aber noch nicht ganz was du meinst!

PicNick
17.12.2005, 10:39
Du hattest es so:


DDRB = (1<<PB2); // der schreibt 00000100 rein. gut.
DDRB = (1<<PB1); // aber der schreibt jetzt 00000010 drüber
// drin steht jetzt 00000010
// der erste 1-er ist jetzt wieder weg

Neu:


DDRB = (1<<PB2); // der schreibt 00000100 rein.
DDRB |= (1<<PB1); // der schreibt seine 00000010 DAZU
// drin steht jetzt 00000110, also beides

Crocodile
17.12.2005, 14:58
Hab das jetzt mal geändert, funktioniert immer noch nicht!Kann vielleicht mal jemand seinen eigenen code posten?Muss ich vielleicht noch was an den Fusebits verstellen oder das dass signal nur an einem bestimmten pin beim 2313 erzeugt wird?

PicNick
17.12.2005, 15:21
Wo hast du die 84 her ?

TIMSK = 0x84; /* Timer0 Overflow Interrupt enable*/

sollte das nicht so sein ?
TIMSK |= (1<<TOIE1);

Crocodile
17.12.2005, 16:45
So hatte ich das am anfang, im ARVStudio wurde der aber nicht gesetzt dann hab ich das einfach mit 0x84 gemacht und so wurde er gesetzt!
arbeitest du auch mit dem 2313, weil wenn dann könntest du ja mal den code bei dir testen!

PicNick
17.12.2005, 16:57
Nö, kein Tiny, nur meg32 u. "normal" 2313.
0x84 ja zwei bits

Wie auch immer, es muß für das enable bit eine definition geben,
Man muß im Datasheet nachlesen, hilft nix

PicNick
17.12.2005, 17:03
Seh gerade, wenn, dann nur 0x80 f. TOIE1 (Oooh->nicht null) im TIMSK

Crocodile
18.12.2005, 00:24
im blatt find ich einfach nix was mir helfen könnte,ich geh totl ein weil es eigentlich ein wichtiges projekt ist aber "Danke dir sehr für deine Hilfe und dein Bemühen!!!!"