-
-
Also erstmal vielen Dank fuer deine Antwort...sehr viel Informationen
Kann ich denn 2 ISR mit dem gleichen Timer laufen lassen...hab ja schon eine ISR fuer meine Zählvariable...und mit dem itoa() das versteh ich irgendwie nicht so recht...hab mein Programm mal mit Hilfe des Tutotrials so weit verändert wie es ging...
//define all external dependencies
#include <avr/io.h>
#include <avr/interrupt.h>
//declare all used functions
void Sensor_init(void);
void LED_SW_init(void);
void uart_init(void);
void TIMER2_interrupt_init(void);
//define variables
volatile unsigned int z;
volatile unsigned int sekunde;
volatile unsigned int T1;
volatile unsigned int T2;
volatile unsigned int TD;
void uart_init(void)
{
UCSRB |= (1<<TXEN); // UART TX einschalten
UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // Asynchron 8N1
UBRRH = UBRR_VAL >> 8;
UBRRL = UBRR_VAL & 0xFF;
}
void TIMER2_interrupt_init(void)
{
TCCR2 = (1<<WGM21)|(0<<WGM20)|(1<<CS22)| (1<<CS21) |(0<<CS20); //CTC mode und Prescaler auf 256
TCNT2=0;
OCR2=199; //alle 0.008 s Interrupt
TIMSK = (1<<OCIE2);
}
ISR(TIMER2_COMP_vect) //LED soll alle 1s leuchten
{
z++;
if(z==72)
{
PORTB ^= (1<<PB0);
z=0;
}
}
int main(void)
{
Sensor_init();
LED_SW_init();
uart_init();
TIMER2_interrupt_init();
while(1)
{
if(!(PINA & (1<<PINA0))) //Mit Pin 0 soll T1 gespeichert werden
{
T1 = sekunde;
}
if(!(PINA & (1<<PINA1))) //Mit Pin 1 soll T2 gespeichert werden und die Differenz berechnet werden
{
T2 = sekunde;
TD = T2-T1;
}
}
void Sensor_init(){
DDRA=0x00; // For using the floating sensor the Port A has to be used as a digital input
PORTA=0xff; // activate internal pull-up resistors for PORTA
}
void LED_SW_init(){
DDRB=0xFF; // PORTB is output for LEDs
PORTB=0xFF; // all LEDs off
}
//-------------------------------------------------------------------------------------------------//
/* ATmega16 */
int uart_putc(unsigned char c)
{
while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
{
}
UDR = c; /* sende Zeichen */
return 0;
}
/* puts ist unabhaengig vom Controllertyp */
void uart_puts (char *s)
{
while (*s)
{ /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
uart_putc(*s);
s++;
}
}
//-------------------------------------------------------------------------------------------------//
Weiss nicht so recht wie ich da jetzt meine Variable TD unterkriegen soll !? Un dass er mir die auch noch sendet...also als Terminalprogramm verwende ich hterm und als Entwicklungsumgebung avrstudio4. Mein Board ist ein stk500 und ich habe einen Atmega16 drauf. Mein groesstes Problem ist wie gesagt das Senden eines Variableninhalts und wo ich das unterbringen muss...macht man so etwas in main() in der Schleife oder irgendwie anders ?????
Viele Gruesse,
Jimmy
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen