Hallo Leute,
ich will in die Welt der Microcontroller einsteigen und so habe ich diese Seite gefunden:
http://derjulian.net/mikrocontroller
Ich hab mir also die besagte Schaltung zusammengebaut, inklusive externem Quarz (8Mhz) und der Transistorschaltung zum Invertieren der Pins.
Als Testcode habe ich mir das hier zusammenkopiert:
Das ganze compiliert er schonmal nicht durch, er hat ein Problem mit pause(1):Code:#include <avr/io.h>
#include <avr/interrupt.h>
#define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)
#define UART_BAUD_RATE 2400
#define UART_BUFFER 10
uint8_t uart_buffer[UART_BUFFER];
int8_t uart_count = 0 ;
uint8_t uart_getc(void)
{ /* output next char in cache
*/
if (uart_count == 0) return 0;
return uart_buffer[--uart_count];
}
ISR(SIG_UART_RECV)
{ /* INTERRUPT: receive char from UART and save it the buffer
*/
if (uart_count < UART_BUFFER) uart_buffer[uart_count++] = UDR;
}
inline void uart_init(uint8_t tx, uint8_t rx)
{ /* initializes UART communication;
* tx: sending should be activated
* rx: receiving should be activated
*/
uint16_t baudrate;
// Baud-Rate setzen
baudrate = UART_BAUD_RATE/2;
UBRRH = (uint8_t) (UART_UBRR_CALC(baudrate,F_CPU)>>8);
UBRRL = (uint8_t) UART_UBRR_CALC(baudrate,F_CPU);
// Ggf. TX und RX anschalten
UCSRA |= (1<<U2X);
UCSRB |= (1<<RXCIE);
if(tx) UCSRB |= (1<<TXEN);
if(rx) UCSRB |= (1<<RXEN);
sei();
pause(1);
}
void uart_putc(uint8_t c)
{ /* send one char per UART
*/
while (!(UCSRA & (1<<UDRE)));
UDR = c;
}
void uart_puts(uint8_t *data)
{ /* send string per UART
*/
while(*data)
{
uart_putc(*data);
data++;
}
}
void uart_puti(uint16_t data)
{ /* send integer per UART
*/
uint8_t buffer[7];
uart_puts(utoa(data, buffer, 10));
}
void uart_putf(float data)
{ /* send float per UART
BUG: unnötige Leerzeichen am Anfang?
*/
uint8_t buffer[7];
uart_puts(dtostrf(data, 6, 2, buffer));
}
int main(void)
{
DDRB |= (1 << PB1);
PORTB &= ~(1 << PB1);
uart_init(1, 1);
uart_puts("Hello World!\n");
}
Davor noch ein paar Warnings.Zitat:
undefined reference to 'pause'
Schmeiße ich das pause raus compiliert er durch, wobei die warnings bleiben.
Nun schreibe ich die hex auf den uC, die LED leuchtet auch wie gewollt, allerdings bekomme ich nichts auf der Seriellen Konsole, tail -f /dev/ttyS0 gibt mir nichts aus.
Am Windows-Netbook hab ich einen RS232-USB Converter. Schließe ich es da an und öffne den Hyperterminal, stelle 2400Bauds ein, bei 8 Datenbits, keine Parität, Stoppbits: 1, und Flusssteuerung Hardware, dort bekomme ich auch nichts.
Woran kanns liegen?
grüße
dennis