Nils Wenzler
02.12.2007, 17:42
Hallo
Ich muss um eine Projektarbeit fertigstellen zu können endlich den ATmega-168 mit meinem PC verbinden und Werte auf den Schirm senden. Also ich habe folgende Software im AVR:
//uart_tx:
// -Bedienen des UART-Hardware Modules
// -Hardware: -UART
//************************************************** *******************************************
#include <avr/io.h>
#include "uart_tx.h"
#include "avr/interrupt.h"
#include "stdlib.h"
#define F_CPU 8000000L
#define BAUD 9600L
// Berechnungen
#define UART_UBRR_CALC ((F_CPU)/((BAUD)*16L)-1)
//local
volatile uint8_t data;
//uart_init, Initialisiere UART
void uart_tx_init(){
UCSR0B |= (1<<TXEN0) | (1 << TXCIE0); // UART TX einschalten
UCSR0C |= (1<<UMSEL00)|(0<<UMSEL01); // Asynchron 8N1
UBRR0H =(uint8_t)(UART_UBRR_CALC>>8); //set baudrate
UBRR0L = UART_UBRR_CALC & 0xFF;
}
/* SENDEN*/
//uart_tx sendet ein Zeichen, uart_txs ein String, uart_txs_var einen ASCII Zeichensatz
void uart_tx(uint8_t c) {
SREG |= (0 << 7);
data=c ;
SREG |= (1 << 7);
}
//String senden
void uart_txs(uint8_t *s) {
while (*s)
{ // so lange *s != '\0' also ungleich dem "String-Endezeichen"
uart_tx(*s);
s++;
}
}
//Integer zu ASCII (Zeichen)
void uart_txs_var(uint16_t i){
char s[7];
i = -12345;
itoa( i, s, 10 ); // 10 fuer radix -> Dezimalsystem
uart_tx(*s);
}
ISR(USART_TX_vect){
UDR0 = data ;
}
Das Headerfile:
#ifndef uart_tx_H_
#define uart_tx_H_
void uart_tx_init();
void uart_tx(uint8_t c);
void uart_txs (uint8_t *s);
void uart_txs_var(uint16_t i);
#endif /*uart_tx_H_*/
Und im Main sieht das ganze mit dm Befehl so aus:
#include <avr/io.h>
#include "uart_tx.h"
#include "alog_digi.h"
#include "send.h"
int main(void) {
//Init
void ir_mod_init();
void uart_tx_init();
void alog_digi_init();
//Hauptschleife
while(1) {
uart_tx('v');
//send();
return 0;
}
}
Auf dem Pc verwende ich Linux, angezeigt wird mit dem Minicom, die Baud ist korrekt auf 9600 eingestellt und der Port ttyS0 (RS232 Serieller Port) ist freigeschaltet. langsam verzweifle ich, da es Partout nicht funktionieren will. (Soll heissen ich habe auf dem Minicom keinerlei Reaktion.
Hat irgendwer ne Idee?
Danke
Gruss Nils Wenzler
Ich muss um eine Projektarbeit fertigstellen zu können endlich den ATmega-168 mit meinem PC verbinden und Werte auf den Schirm senden. Also ich habe folgende Software im AVR:
//uart_tx:
// -Bedienen des UART-Hardware Modules
// -Hardware: -UART
//************************************************** *******************************************
#include <avr/io.h>
#include "uart_tx.h"
#include "avr/interrupt.h"
#include "stdlib.h"
#define F_CPU 8000000L
#define BAUD 9600L
// Berechnungen
#define UART_UBRR_CALC ((F_CPU)/((BAUD)*16L)-1)
//local
volatile uint8_t data;
//uart_init, Initialisiere UART
void uart_tx_init(){
UCSR0B |= (1<<TXEN0) | (1 << TXCIE0); // UART TX einschalten
UCSR0C |= (1<<UMSEL00)|(0<<UMSEL01); // Asynchron 8N1
UBRR0H =(uint8_t)(UART_UBRR_CALC>>8); //set baudrate
UBRR0L = UART_UBRR_CALC & 0xFF;
}
/* SENDEN*/
//uart_tx sendet ein Zeichen, uart_txs ein String, uart_txs_var einen ASCII Zeichensatz
void uart_tx(uint8_t c) {
SREG |= (0 << 7);
data=c ;
SREG |= (1 << 7);
}
//String senden
void uart_txs(uint8_t *s) {
while (*s)
{ // so lange *s != '\0' also ungleich dem "String-Endezeichen"
uart_tx(*s);
s++;
}
}
//Integer zu ASCII (Zeichen)
void uart_txs_var(uint16_t i){
char s[7];
i = -12345;
itoa( i, s, 10 ); // 10 fuer radix -> Dezimalsystem
uart_tx(*s);
}
ISR(USART_TX_vect){
UDR0 = data ;
}
Das Headerfile:
#ifndef uart_tx_H_
#define uart_tx_H_
void uart_tx_init();
void uart_tx(uint8_t c);
void uart_txs (uint8_t *s);
void uart_txs_var(uint16_t i);
#endif /*uart_tx_H_*/
Und im Main sieht das ganze mit dm Befehl so aus:
#include <avr/io.h>
#include "uart_tx.h"
#include "alog_digi.h"
#include "send.h"
int main(void) {
//Init
void ir_mod_init();
void uart_tx_init();
void alog_digi_init();
//Hauptschleife
while(1) {
uart_tx('v');
//send();
return 0;
}
}
Auf dem Pc verwende ich Linux, angezeigt wird mit dem Minicom, die Baud ist korrekt auf 9600 eingestellt und der Port ttyS0 (RS232 Serieller Port) ist freigeschaltet. langsam verzweifle ich, da es Partout nicht funktionieren will. (Soll heissen ich habe auf dem Minicom keinerlei Reaktion.
Hat irgendwer ne Idee?
Danke
Gruss Nils Wenzler