Forum: Mikrocontroller und Digitale Elektronik Butterfly Programmierung


von Ingo (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.