- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Zum Dum oder wirklich falsch C Code mit winAVR

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    50
    Beiträge
    1.562

    Zum Dum oder wirklich falsch C Code mit winAVR

    Anzeige

    Powerstation Test
    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

  2. #2
    Gast
    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

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    50
    Beiträge
    1.562
    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

  4. #4
    Gast
    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

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    50
    Beiträge
    1.562
    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

  6. #6
    Gast
    Schau mal hier rein

    http://www.mc-project.de/

    Unter Programmierung sind viele Bitzugriffe erklärt.

    MFG
    Dieter

  7. #7
    Gast
    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++);
    }

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    50
    Beiträge
    1.562
    Hallo Dieter,

    danke für die Seite werde sie mir gleich mal an sehen

    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);
    }
    so sieht es jetzt auch weiß du wie man eingänge im aver studio simuliert ?

    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

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    #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

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    50
    Beiträge
    1.562
    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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests