Hallo,
ich möchte gern ein kleines Programm für das Butterfly Board schreiben,
welches im 8s Zyklus eine Spannung einliest und ein ASCII-Zeichen über
eine serielle Verbindung sendet. Leider passiert nichts, wenn ich das
HEX-File auf das Board aufspiele. Die Programmier Verbindung zum Board
habe ich erfolgreich getestet. Ich bin über jeden Tipp dankbar.
mfg
Ingo
#include<avr/io.h>
#include<avr/interrupt.h>
#define Clockspeed 32000
#define Baudrate 9600
#define Baud_register (((Clockspeed / (Baurate * 16))) - 1);
//Globale Variablen
uint8_t temp;
//Funktionen
int init_timer0();
int init_adc();
int init_uart_tx();
int main(void)
{
//Interrupts aktivieren
sei();
//PortD als Ausgang
DDRD = 0xFF;
//PORTB als Ausgang
DDRB = 0xFF;
//Timer0 intialisieren
init_timer0();
//Analogwandler intialisieren
init_adc();
//Serielle-Schnittstelle intialisieren
init_uart_tx();
//Globale Variable intialisieren
temp = 0;
for(;;)
{
}
return 0;
}
int init_timer0()
{
//aktivieren Timer0 Interrupt
TIMSK0 |= (1 << TOIE0);
//Clockspeed / 1024
TCCR0A |= ((1 << CS02) | (1 << CS00));
//Alle Timer0 Flags löschen
TIFR0 &= 0;
//Zählerstand zurücksetzen
TCNT0 = 0;
return 0;
}
int init_adc()
{
//Externe Referenzspannung
ADMUX &= ~((1 << REFS1) | (1 << REFS0));
//Aktivieren des ADCs, 1kHz Abtastfrequenz
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS0);
//Starten der AD-Wandlung
ADCSRA |= (1 << ADSC);
return 0;
}
int init_uart_tx()
{
//UART senden
UCSRB |= (1 << TXEN);
//keine Parität, ein Stopp-Bit,
UCSRC |= (1 << UCSZ1) | (1 << UCSZ0);
return 0;
}
ISR(TIMER0_OVF_vect)
{
//Timer0 Overflow-Flag löschen
TIFR0 |= 0x01;
//Zählerstand von Timer0 zurücksetzen
TCNT0 = 0;
//Toggle LED an PortB
PORTB ^= (1 << 0);
//"Single Conversion"
ADCSRA |= (1 << ADSC);
//Auf das Ende der Wandlung warten
while (ADCSRA & (1 << ADSC))
{
}
//Ausgabe des Highregisters am PORTD
PORTD = ~ADCH;
//ASIIC Zeichen A senden
UDR = 'A';
//Auf das Ende der UART Übertragung warten
while (!(UCSRA & (1 << UDRE)))
{
}
}
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.