Hallo
Welche uC verwendest du denn ? Bei den neueren haben sich ein paar Registernamen geändert.
Bei UART_BAUD_SELECT fehlt oben bei dem define ein e.
MFG
Dieter
Hallo leute
bekomme diese programm nicht kompiliert
habe ich es nicht verstanden oder was ?
Code:#include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #define F_CPU 16000000 // 16 MHz #define UART_BAUT_RATE 19200 // 19200 Baud #define UART_BAUD_SELCT (F_CPU/(UART_BAUD_RATE*161)-1) typedef unsigned char BYTE; typedef unsigned short WORD; BYTE GetKeyCode(void); //routine zum lesen der tasten auf dem board void InitCom(void); void SendText(void); void SendBinary(void); int main (void) { //hauptprg hier geht der controler immer als erstes hin sbi(PORTA,PINA7); //pull ub widerstand einschalten warum weiß ich auch noch nicht //Analogport init outp((1<<ADEN) & 7,ADCSR); // teiler auf 7 damit der bei 16 Mhz Tut BYTE Taste; for(;;) { //endlos schleife für das haupt prg sonst hällt das prg an Taste = GetKeyCode(); if ( Taste != 0) { switch(Taste) { case 1: SendText(); break; case 2: SendBinary(); break; } } } } BYTE GetKeyCode(void) { return 0; } void SendText(void) { } void SendBinary(void) { } void InitCom(void) { //Init serial nur senden outp((1 << TXEN), UCR); // eingeschaltet outp((BYTE) UART_BAUD_SELECT, UBRR); // Baudrate ein gestellt }
Augabe bei complier
main.c: In function `InitCom':
main.c:77: error: `UCR' undeclared (first use in this function)
main.c:77: error: (Each undeclared identifier is reported only once
main.c:77: error: for each function it appears in.)
main.c:79: error: `UBRR' undeclared (first use in this function)
main.c:79: error: `UART_BAUD_SELECT' undeclared (first use in this function)
make.exe: *** [main.o] Error 1
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
Hallo
Welche uC verwendest du denn ? Bei den neueren haben sich ein paar Registernamen geändert.
Bei UART_BAUD_SELECT fehlt oben bei dem define ein e.
MFG
Dieter
Hallo Dieter,
ich habe ein Mega16 ich glaube so langsam komme ich da hinter es gibt
wohl zwei winAVR programme kann das sein ?
der code den ich zur zeit tippe sieht ganz anders aus aber lässt sich compilieren oder wurde da so massiv was geändert ?
oupt( ) mag er auch nicht
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
Hallo
Schau mal in die Docu zu WINAVR. outp, sbi cbi und weitere fallen demnächst weg.
Auf Ports und Register kannst du jetzt direkt schreiben und lesen
PORTC = 0xff;
UDR = 'A';
usw.
Mfg
Dieter
jo seid 10 minuten weiß ich das auch nur jetzt passt mein tutoral nimmer kannd du mir eines emfehlen hier im forum proggen die meisten wohl mit Bascom aber einglich finde ich c auch ganz nett und ich muß tags über nicht in einer anderen sprache denk wie abends.
wie heist den jetzt die funktion für sbi ?
gruß
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
Schau mal hier rein
http://www.mc-project.de/
Unter Programmierung sind viele Bitzugriffe erklärt.
MFG
Dieter
Tolle Seite ist das. Da ist vermutlich dieser Auszug für Dich interessant:
Code:/*********************************************************** Funktionsbibliothek für den USART des Atmega8 ***********************************************************/ #include <avr/io.h> #define F_CPU 4000000 #define USART_BAUD_RATE 9600 #define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16l)-1) void USART_Init(void) { UCSRB = _BV(RXCIE) | _BV(TXCIE) | _BV(RXEN) | _BV(TXEN); UBRRL = (unsigned char) USART_BAUD_SELECT; } void USART_transmit (unsigned char c) { while (!(UCSRA & (1<<UDRE))) {} UDR = c; } unsigned char USART_receive (void) { while(!(UCSRA & (1<<RXC))) {} return UDR; } void USART_transmit_string (unsigned char *string) { while (!(UCSRA & (1<<UDRE))) {} while ( *string) USART_transmit (*string++); }
Hallo Dieter,
danke für die Seite werde sie mir gleich mal an sehen
so sieht es jetzt auch weiß du wie man eingänge im aver studio simuliert ?Code:/************************************** mains.c Autor: Numberfive versuchen das ganze mal zu verstehen. *************************************/ #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #define F_CPU 16000000 // 16 MHz #define UART_BAUD_RATE 19200 // 19200 Baud #define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*161)-1) typedef unsigned char BYTE; typedef unsigned short WORD; BYTE GetKeyCode(void); //routine zum lesen der tasten auf dem board void InitCom(void); void SendText(void); void SendBinary(void); int main (void) { //hauptprg hier geht der controler immer als erstes hin InitCom(); sbi(PORTA,PINA7); //pull ub widerstand einschalten warum weiß ich auch noch nicht //Analogport init outp((1<<ADEN) & 7,ADCSR); // teiler auf 7 damit der bei 16 Mhz Tut BYTE Taste; for(;;) { //endlos schleife für das haupt prg sonst hällt das prg an Taste = GetKeyCode(); if ( Taste != 0) { switch(Taste) { case 1: SendText(); break; case 2: SendBinary(); break; } } } } BYTE GetKeyCode(void) { WORD Result = 0; BYTE Taste = 0; //Init ADwandler ADCSRA = (1<<ADEN)|(1<<ADSC)|(0<<ADATE)|(0<<ADIE)|(7<<ADPS2); // wir messen Porta Pin 7 ADMUX = (1<<PINA7); // was diese zeile bedeutet weiß ich nicht sbi(ADCSRA,ADSC); // warten bis messung abgesclossen ist und wert gültig loop_until_bit_is_set(ADCSRA,ADSC); // den wert aus dem register holen Result = inw(ADCL); // Wiederstands Netzwerk interpretieren if (Result < 1010) { if(Result >= 410 && Result <= 450) { Taste = 1; } if(Result >= 340 && Result <= 380) { Taste = 2; } if(Result >= 265 && Result <= 305) { Taste = 3; } if(Result >= 180 && Result <= 220) { Taste = 4; } if(Result >= 100 && Result <= 130) { Taste = 5; } } return Taste; } void SendText(void) { } void SendBinary(void) { } void InitCom(void) { /* Set baud rate */ UBRRH = (BYTE) (UART_BAUD_SELECT>>8); UBRRL = (BYTE) UART_BAUD_SELECT; /* Enable receiver and transmitter */ UCSRB = (1<<RXEN)|(1<<TXEN); /* Set frame format: 8data, 1stop bit */ UCSRC = (1<<URSEL)|(0<<USBS)|(3<<UCSZ0); }
Gruß und dank für deine mühe
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
#define UART_BAUT_RATE 19200 // 19200 Baud
#define UART_BAUD_SELCT (F_CPU/(UART_BAUD_RATE*161)-1)
soviele fachleute geben ratschläge. keiner hat gemerkt, das
"uart_baut_rate" einmal mit "t" geschrieben wurde und einmal mit "d".
mfg pebisoft
ich glaube pebisoft du hast dich verguckt.
aber egal die software läuft danke.
Zu mindestens im meinen Code fenster kann ich den schreib fehler nicht entdecken.
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
Lesezeichen