- LiTime Speicher und Akkus         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: C Beispielprogramm flashen

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    03.12.2008
    Alter
    29
    Beiträge
    438

    C Beispielprogramm flashen

    Anzeige

    Praxistest und DIY Projekte
    Hi,
    Ich hab jetzt das RN-Control vor mir liegen und das von WINAVR installierte Programmers Notepad geöffnet...
    Dazu hab ich noch ein MK3 welchen ich direkt mit dem RN-Control und dem USB verbinden kann...
    Wie kann ich jetzt die headerdatei erstellen und nachher das C Beispielprogramm schreiben und auf das RN Control flashen?

    Irgendwie kann ich nirgends sowas finden wie "Headerdatei erstellen"...
    Im Internet hab ich schon nach einer Lösung gesucht, aber irgendwie nichts gefunden... Und die CD welche mit dem RN-Control mitgeliefert wurde hilft mir dabei auch nicht weiter, da da nur gezeigt wird wie ich das alles mit einem Bascom compiler machen kann, aber ich will ja mit C arbeiten...
    Und noch eine Frage:
    Ist der Compiler eigentlich im Programmers Notepad?

    Würde mich über Antworten freuen!

    Grüsse!
    Wer keine Illusionen mehr hat, wird weiterhin existieren, aber aufgefhört haben zu leben.
    (Leonard da Vinci)

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    57
    Beiträge
    847
    Hallo,

    wenn du ein neues RN-Control hast, sind die Fuses schon richtig gesetzt, auch ein Bootloader für Serielles Flashen ist drauf.

    Zum Programmieren würde ich dir AVR Studio 4 empfehlen, wenn du einen Windows PC hast.

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    Du schaust vielleicht etwas zu wenig in die Suchfunktion und ins RNWiki.

    Arbeite mal die Tutorials durch (DURCH ARBEITEN), die ich in diesem Posting aufgelistet habe. Dort stehen genau die Antworten zu den Fragen, die Du gerade gestellt hast. Auch Zweck, Inhalt und Erstellung der Headerdateien wird dort erläutert.

    (Anmerkung: Momentan ist das RN-Wiki
    https://www.roboternetz.de/wissen/index.php/Hauptseite
    offenbar etwas out of order - nicht verfügbar.)
    Ciao sagt der JoeamBerg

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    03.12.2008
    Alter
    29
    Beiträge
    438
    Hi,
    Danke für die Antworten!

    Zitat Zitat von pinsel120866

    Zum Programmieren würde ich dir AVR Studio 4 empfehlen, wenn du einen Windows PC hast.
    Muss ich AVR Studio 4 nehmen oder geht das auch mit Programmers Notepad?
    Ich habe Windows Vista und das Unterstüzt das irgendwie nicht...
    Oder kennst du vielleicht sonst noch was worauf ich programmieren kann und das Programm dann anschliessend flashen?

    Grüsse!
    Wer keine Illusionen mehr hat, wird weiterhin existieren, aber aufgefhört haben zu leben.
    (Leonard da Vinci)

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    Hi Da_Vinci13

    Zitat Zitat von Da_Vinci13
    ... Muss ich AVR Studio 4 nehmen oder geht das auch mit Programmers Notepad ...
    Soweit ich weiß,
    >> ist Programmers Notepad kein Compiler, sondern ein Editor
    >> hatte Dir Gock am: 27 Dez 2008 geschrieben
    AVRStudio, WinAVR und Assembler geht alles unter Vista. Es gibt noch PonyProg, AVRDude und und und... Google!!! Es gibt nicht viel, das auf Vista nicht geht.
    Und die Suchfunktion, die ich Dir oben empfohlen hatte, hätte Dir gezeigt, dass für Vista eine neue Version des AVRStudio empfehlenswert ist.
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    03.12.2008
    Alter
    29
    Beiträge
    438
    Hi,
    Danke für die Links!
    Ich weiss, er hat mir das mal geschrieben, aber bei mir geht das wirklich nicht.
    Wenn ich AVR Studio 4.13.557 installiert habe und nachher anwenden möchte steht "Sie brauchen dafür AVR Studio 4.13"
    Also wollte ich das auch installieren, aber dann stand:
    "Der Angegebenen Datei ist keine Verwendung zur Verfügung"

    Grüsse!
    Wer keine Illusionen mehr hat, wird weiterhin existieren, aber aufgefhört haben zu leben.
    (Leonard da Vinci)

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    03.12.2008
    Alter
    29
    Beiträge
    438
    Hi,
    Ich hab mir jetzt AVR Studio 4.15 installiert! Erfolgreich! Danke für die Hilfe!
    Jetzt taucht aber gleich eine weitere Frage auf:
    Wenn ich jetzt da die Plattform wählen muss taucht eine Liste auf von verschiedenen Plattformen:
    STK500 or AVRISP
    JTAG ICE
    JTAGICE mkll
    AVRISP mkll
    AVR Dragon
    STK600
    AVR ONE!

    Ich denke mal ich sollte STK500 or AVRISP nehmen, aber wenn ich das an klick dann kommen verschiedene Ports:
    Auto
    COM1
    ...
    COM9

    Jedoch nirgends USB und ich will ja über USB programmieren...

    Bei den restlichen kommt in der Liste USB (ausgeschlossen JTAG ICE)

    Kann ich da einfach eines auswählen in welchem USB steht?

    Würde mich über eine Antwort freuen!

    Grüsse!

    EDIT: gelöst
    Wer keine Illusionen mehr hat, wird weiterhin existieren, aber aufgefhört haben zu leben.
    (Leonard da Vinci)

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    03.12.2008
    Alter
    29
    Beiträge
    438
    Hi,
    Ich hab jetzt den ganzen Nachmittag im Internet rum recherchiert und auch wieder einiges herausgefunden! Aber ich habe immer ein Problem:

    Wenn ich eine Datei schreibe, danach mit .h abspeichere und sie anschliessend als Headatei erstellen will, dann wird sie nie zu einer Headerdatei, sondern immer zu "External Dependicies"...
    Um mein Problem einbisschen genauer zu schildern:
    Ich schreibe eine Datei Headerdatei.h und speichere diese anschliessend
    Ich erstelle ein neues Projekt
    Ich geb in "include Derictories" den Pfad von Headerdatei.h an
    Ich schreibe:
    ...
    include "Headerdatei.h"
    ...

    Und es gibt beim compilieren einen Fehler...
    Ich weiss weshalb es beim compilieren einen Fehler gibt:
    Es hat verschiedene Ordner gleich neben dem Editor fenster, in welchem ich ein Programm schreiben kann. Unteranderm auch den Ordner "Header Files"
    Dort hat es aber die Datei Headerdatei.h nicht drin. Sondern diese hat es in External Dependencies.
    Weiss jemand warum das so ist?

    Würde mich über eine Lösung riesig freuen!

    Grüsse!
    Wer keine Illusionen mehr hat, wird weiterhin existieren, aber aufgefhört haben zu leben.
    (Leonard da Vinci)

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    Hi Da_Vinci13

    mal in Kurzform:

    Schreib eine Headerdatei etwa mit dem Inhalt (dies nur als Beispiel, auszugsweise, aus einer *.h-Datei die ich grad parat habe) Variablendeklarationen, Funktionsprototypen:

    Code:
    /* Sicherung 15sep08 1120   ...C1..\m168D_10\m168D_com_10x80.c 
     ===================================================================================
     ===================================================================================
      Target MCU        : M168
      Target Hardware   : div, z.B. flex168, m168D
      Target cpu-frequ. : In der Quelle wählbar
     ===================================================================================
      Enthaltene Routinen:
        KEINE - nur Variablendefinitionen
     ===================================================================================
      *** Versionsgeschichte:
     ====================
     x82 29Jan09 Iz_diff0 wird im Test als Null angezeigt: unsigned-Problem?
                 ie_mot12 (-34?) wird als 63... angezeigt: unsigned-Problem?
    ....
     x00 27jan08 00:ff Erster Aufbau von \2-drehz-mess\r2d_common_x00.h
    
      Original: ...C1..\2_drehz-mess\ -
     ===================================================================================
      *** Aufgabenstellung : Initialisierung und Abarbeitung von Interuptroutinen für
      die Programmsammlung zum R2D2cd
     ================================================================================ */
    
    
    
    /*==================================================================================
     ===================================================================================
     ================================================================================ */
    /*##### Variablenliste, global #####*/
    /*==================================================================================
     ===================================================================================
     ================================================================================ */
    
    
    /*==================================================================================
      Motordaten: Steuerung, Motortests
     ================================================================================ */
    uint8_t imot = 1, kre = 1, kli = 1;
    uint8_t min = 15, max = 122;
    uint16_t mosore = 20, mosoli = 20;      // Sollfahrt rechts und links
    uint8_t moffre = 0, moffli = 0;         // Geschwindigkeitsoffset Motor re/li
    volatile uint8_t most12 = 0, most34 = 0;        // Motoransteuerwert / Absolutwert
                                    // vgl. zu most oben mosore/~li, moffre/~li etc.
    volatile uint16_t stupsi12=0, stupsi34 = 0;     // Sollwert Motoransteuerung
                                                    // = Führungsgröße w
    volatile uint16_t tupsi12=0, tupsi34 = 0;       // Istwert Motor
                                                    // = Regelgroesse x (= Iz_diff0)
    // volatile float e_mot12, esum12, y12;         // für Regelalgorithmus
    volatile int16_t ie_mot12, iesum12, iy12;       // für Regelalgorithmus
    volatile int16_t idrz12, ndrz12;                // Ist-/Solldrehzahl
                                                      
    volatile int16_t ie_mot34, iesum34, iy34;       // für Regelalgorithmus
    volatile int16_t idrz34, ndrz34;                // Ist-/Solldrehzahl
                    
    uint16_t Iservo;                                // Counter für Regelfrequenz
                               
                               
    /*==================================================================================
      Encoderbedienung und Zeitdaten
     ================================================================================ */
    /*Ab rev x42: Indizes f EXT-INT0 + EXT-INT1 angepasst: 0 und 1 statt 1 und 2      */
    /* beachte: volatile!  und   Vorzeichenlos reicht für alle                        */
    
    volatile uint16_t Iencdr0, Iencdr1;	/* Counter für Encoder-ticks
      Werden in der ISR hochgezählt und im main bei Gelegenheit
        (welcher? - nach 5 sec?) - spätestens aber beim Fahrtrichtungswechsel
        auf Null gesetzt. DAnn aber die Werte musv+musi entsprechend anpassen    */
    
    
    volatile uint16_t Ienc0alt, Ienc1alt;   // Encoder-Altwerte
    
    
    volatile uint16_t Iz_ysecv0, Iz_ysecv1;	/* Zeitmarke "µsec"
      des vorletzten Interrupts in der Einheit 100 Mikrosekunden. Ist der Wert des
      hochlaufenden Timers zum Interruptzeitpunkt i-1                            */
    
    volatile uint16_t Iz_yseci0, Iz_yseci1;	/* Zeitmarke "µsec"
        des letzten Interrupts in der Einheit 100 Mikrosekunden. Ist der Wert des
        hochlaufenden Timers zum Interruptzeitpunkt i (letzter Interrupt)        */
    
    //volatile uint16_t Iz_diff0, Iz_diff1;	  
    volatile int16_t Iz_diff0, Iz_diff1;	
                                           /* Zeitdifferenz
      Beim Abarbeiten des Interrupts wird yseci mit time1 belegt und diff aus der
        Differenz yseci-ysecv errechnet. Danach wird yseci nach ysecv kopiert.
        Im main bzw. regelung wird aus Iz_diffx die Drehzahl berechnet.               */
    
    volatile uint16_t Izeit_1;			/* Timer läuft hoch
      Die Interruptroutine läuft mit 20 kHz (Möglicherweise sind 100 kHz besser)
        Beim Start des Timers läuft der Zähler time1 hoch und wird nach 3 sec -
        also beim Wert 60 000 - wieder auf Null gesetzt. Dabei werden die Werte
        ysecv und yseci angepasst                                                  */
    volatile uint16_t Izthrznt;     // Der zeitliche Horizont, z.B. 20000 für 2 sec
    
    volatile uint16_t icntdwn;      // Countdownzähler (max 43200 = 12 Std)
    volatile uint16_t icdwvor;      //   x Sekunden Vorwarnung mit blLED
    volatile uint16_t icdwmax;      //   x Sekunden aktueller Maximalwert für Countdown
    
    volatile uint16_t Iztmp_0;			/* Timer läuft hoch
      Zeitdifferenz zwischen zwei extINT0 wenn die Differenz kleiner als 10 ist, 
      break - dann ist der Interrupt  viel zu kurz um korrekt zu sein.               */
    
    volatile uint16_t Iztmp_1;			/* Timer läuft hoch
      Zeitdifferenz zwischen zwei extINT1 wenn die Differenz kleiner als 10 ist, 
      break - dann ist der Interrupt  viel zu kurz um korrekt zu sein.               */
    
    volatile int16_t Ikre, Ikli, Iregel1, Iregel2;	/* Zeitvorgaben und Regelwerte
      Ikre und Ikli sind die Entsprechungen von kre und kli, sie werden
        in der Regelungsroutine verarbeitet                                          */
                     
    volatile uint8_t Idelta1=100, Idelta2=100;      /*                               */
    
    ...............................
    
    
    /*==================================================================================
     ===================================================================================
     ================================================================================ */
    /*##### Modulliste           #####*/
    /*==================================================================================
     ===================================================================================
     ================================================================================ */
                     
                     
    /*==================================================================================
      Routinen in Datei m168D_dme_10x80.c        Routinen:     irDME-Routinen
     ================================================================================ */
      void TC0IRP_CMA_init(void);
      ISR(TIMER0_COMPA_vect);
      void TC1PWM_init(void);               //Init Timer/Counter 1, PWM-Signal 
      void setSRV1(uint16_t speed1);        //Relative Pulslänge auf OC1A/PB1
    /*==================================================================================
     ================================================================================ */
                     
                     
    /*==================================================================================
      Routinen in Datei m168D_inf_10x81.c           Routinen:     INFO´s
     ================================================================================ */
      void init_USART0( unsigned int ubrr ); 
      void sendchar(unsigned char c);
      void sendUSART(char *s);
      char getchar(void);
      void getsUSART(char* Buffer, uint8_t MaxLen);
      static inline void setportbon(const uint8_t n);   // für Ports B, C und D
      void info01(void);            // Startinfo     #####>>>>> steht IMMER im main
      void info_Motst(void);        // Ausgabe Daten zu ~tst~/void Motst_aufab(void)
      void info_Motupm(void);       // Ausgabe Upm zu ~tst~613~/void Motst_aufab(void)
      void inf_irDME(uint8_t m1, uint8_t m2, uint8_t m3);
    /*==================================================================================
     ================================================================================ */
    ....................
    Aufpassen bei der Syntax für die Funktionsprototypen. Die werden so dargestellt wie oben geschrieben, praktisch wie die Funktion selbst, aber mit Semikolon danach ! ! !

    Im main wird so darauf Bezug genommen:

    Code:
    #include "m168D_com_10x82signed.h"    // commonvariable
    ...bzw. in etwas mehr "Umgebung" des Hauptprogramms
    Code:
    /* Sicherung 28Jan09 1230   ...C1..\m168D_10\m168D_10x83.c
     ===================================================================================
      Target MCU        : ATmega168
      Target Hardware   : m168D für R2D03
      Target cpu-frequ. : 20 MHz, externer Quarzoszillator
     ===================================================================================
      Enthaltene Routinen :
            #includes siehe unten
                    
      void info01(void)   // Startinfo   #####>>>>> steht IMMER im main-modul
      int main(void)
     ===================================================================================
      *** Versionsgeschichte:
     ==================== 
     x83 28Jan09 1230 tupsitest Testweise Ausgabe stupsi, tupsi etc zur Kontrolle der 
         Fahrgeschwindigkeit: ==> Iz_diff0 wird falsch ausgegeben UND
         ie_mot12/34 darf nicht usigned sein (kann ja negativ werden).
    ..............................
     x00 17mai08 1556 Übernahme von *x342.c v. 26jun08 1336
     ===================================================================================
      *** Aufgabenstellung : Software für R2_D03
                  in einer ersten Ausbaustufe angelehnt an: siehe Original              
      Original: ...C1..\m168D_10\m168D_10x342.c   26juni08 13ff
     ===================================================================================
    Alle möglichen Portanschlüsse am ATMega168:
                   ==============          ===
           PCINT14,/RESET,PC6   1   28   PC5,ADC5,SCL,PCINT13
              PCINT16,RxD,PD0   2   27   PC4,ADC4,SDA,PCINT12
              PCINT17,TxD,PD1   3   26   PC3,ADC3,PCINT11
             PCINT18,INT0,PD2   4   25   PC2,ADC2,PCINT10
        PCINT19,OC2B,INT1,PD3   5   24   PC1,ADC1,PCINT9
           PCINT20,XCK,T0,PD4   6   23   PC0,ADC0,PCINT8
                          VCC   7   22   GND
                          GND   8   21   AREF
      PCINT6,;XTAL1,TOSC1,PB6   9   20   VCC
       PCINT7,XTAL2,TOSC2,PB7  10   19   PB5,SCK,PCINT5
          PCINT21,OC0B,T1,PD5  11   18   PB4,MISO,PCINT4
        PCINT22,OC0A,AIN0,PD6  12   17   PB3,MOSI,OC2,OC2A,PCINT3
             PCINT23,AIN1,PD7  13   16   PB2,/SS,OC1B,PCINT2
         PCINT0,CLKO,ICP1,PB0  14   15   PB1,OC1A,PCINT1
    --------------------==========-----------------------
    Vorgesehene/belegte Anschlüsse am (ATMega168)-R2D2cc:
                ==================                        (für ´168 d = Drive/Director)
                       /RESET   1   28   PC5,(SCL) aktuell LED
                    RxD,(PD0)   2   27   PC4,(SDA) aktuell LED
                    TxD,(PD1)___3   26___PC3, ADC0 / Sharp GP2D120
      (SigMot1) ExtINT0,(PD2)   4   25   PC2, SFH 5110, IN irDME 4   } vorgesehen
      (SigMot2) ExtINT1,(PD3)   5   24   PC1, SFH 5110, IN irDME 3   } evtl. auch in
      (E7)  _|-- 3,4 Guz, PD4___6   23___PC0, SFH 5110, IN irDME 1-2 } ´168 n
                          VCC   7   22   GND
                          GND   8   21   AREF
                   XTAL1  PB6___9   20___VCC
                   XTAL2  PB7  10   19   PB5, (Startblink/LED0, 3sec v Tmr0, Mehrzweck)
      (E6) PWM 1,2 uz+Guz,PD5  11   18   PB4  _|-- 3,4  uz  (E4) (hier oder PB3)
      (E5) PWM 3,4 uz+Guz,PD6__12   17___PB3, Reserve 2
      (E8)   _|-- 1,2  uz,PD7  13   16   PB2, Servo
      (E9)   _|-- 1,2 Guz,PB0  14   15   PB1, OC1A = SFH 415, OUT (irDME)             */
    /* ============================================================================== */
                       
    #include <stdlib.h> 
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/pgmspace.h>       // Dies für die UART-Library "Fleury"
    /* Beachte C:\Programme\WinAVR-20070525\avr\include\avr\iomx8.h */
              
    #include "m168D_com_10x82signed.h"    // commonvariable
    #include "m168D_dme_10x80.c"    // irDME Routinen
    #include "m168D_inf_10x81.c"    // Info-Ausgaben     - - - Usart zuerst init.
    //#include "m168D_kal_10x81.c"    // Kalibrierungen, speziell irDME´s
    //#include "m168D_kal_10x81x.c"    // Kalibrierungen, speziell irDME´s
    //#include "m168D_kal_10x81y.c"    // Kalibrierungen, speziell irDME´s
    #include "m168D_kal_10x81zz.c"    // Kalibrierungen, speziell irDME´s
    #include "m168D_mot_10x80.c"    // Motorroutinen incl. PWM, Regelung Motor
    #include "m168D_tmr_10x81.c"    // Timer, PWM
    #include "m168D_gpd_10x80.c"    // ADC-Routinen für GP2D120 und Aufruf Regelung
    //#include "m168D_tst_10x82x.c"    // Testroutinen
    //#include "m168D_tst_10x82y.c"    // Testroutinen
    #include "m168D_tst_10x83_tupsitest.c"    // Testroutinen
    
    #define MCU = AVR_ATmega168
    
    #define F_CPU  20000000         // Quarz 20 Mhz-CPU
    // #define BAUD   57600
    #define UART_BAUD_RATE     57600        // Änderung am 19sep08 2220 für lib Fleury
    #define MYUBRR ((unsigned int)((unsigned long) F_CPU/16/BAUD-1)) //vgl doc2545,S179
    //            und https://www.roboternetz.de/phpBB2/ze...=375337#375337
    /* ============================================================================== */
    /*   Interrupt-Handler und -Adressen
    Address Labels Code Comments
    siehe C:\Programme\WinAVR-20070525\avr\include\avr\iomx8.h sowie
    Interruptvektoren/-vektortabelle in *doc2545, S 63 von AVR                    */
    
    /* ============================================================================== */
    // =====  Subroutinen  =============================================================
    /* ============================================================================== */
    
    .................................
    
    /* ============================================================================== */
    /* ===  HAUPTProgramm =========================================================== */
    /* Initialisierungen, LED1 kurzblinken als Signal für Programmstart,
        Ausgabe des Indentifizierungsstrings per USART                                */
    
      int main(void)
    {        
      uint8_t i;
                   
    //Pins/Ports als Ein- (0) oder Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
      DDRB  = 0b00110111;   // siehe aktuell oben oder fortschritt/R2D2
      PORTB = 0b11001000;   //    und Port/Pull Ups (1)  aktivieren
                  
      DDRC  = 0b01110000;   // PC3 ist ADC3, PC0 .. 6 , kein PC7-Pin bei m168
      PORTC = 0b00000111;   // Änderung für ADC: PC3 ist Eingang ##>> OHNE Pullup !!
                            //   Encoder_1 = ExtINT0 = PortD2, Encoder_2 = PortD3
      DDRD  = 0b11110000;   // -> siehe unter DDRB,  sowie PD2,3 extInt
      PORTD = 0b00001111;   //    Pull Ups aktivieren
                   
      for(i=0; i<20; i++)   // LED auf PC5 5 sek blinken lassen 
                            //   ###>>> bevor Interrupts erlaubt sind, um ungewollte
    			//   Resets u.ä. besser erkennen zu können
      {
        setportcon(5);      //   Hellphase
        waitms(3);          //    ... damit man kurze resets besser erkennt
        setportcoff(5);     //   Dunkelphase
        waitms(97);
      }        
                       
      TC0PWM_init();        //Init Timer/Counter0 für PWM/Motoren               
      TC0IRP_CMA_init();    //Init Tmr/Cnt0 CmprMtchA Interrupt enable - zu dme
                                  
      TC1PWM_init();        //Init Timer/Counter1 36kHz/27,8µs am 19 Mai 2008, 2258Uhr
      setSRV1(128);         //  und gleich irLED einschalten auf Maximalwert-
                            
      Isvs1    = 27;        //Vorgabewert "Servoansteuerung" auf Mittelstellung
      TC2TMR_init();	//Init Timer/Cntr2-Interrupt Zeitnahme 20 kHz/50 µsec
                            
      ADC3_10_init_irupt(); // Initialisiere ADC3, 10 Bit, MIT Interrupt
    //  init_USART0(MYUBRR);  //USART0 initialisieren mit wählbarer Baudrate (s.o.)
      uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );  // Init "Fleury"
    
      XTI_0_1_init();       //Initialisiere den externen Interrupt 0 und 1
                            
      sei();		//Globalen Interrupt freigeben
                                                    
      waitms(1000);         
      init_KO_lst();        //Initialisierung KOnstanten-Liste = Werte + div. Vorgaben
                            //  Aufruf NACH sei(), weil irDME´s abgefragt werden.
      waitms(1000);         
      info01();             //Startinfo über USART ausgeben
                             .................
    }
    // =====  Ende des Testabschnittes, er kann aus mehreren Abschnitten bestehen =====
    // ================================================================================
                  
    /*  Es folgt der aktuelle Übersetzungskommentar:
    Build started 30.9.2008 at 18:13:37
    avr-gcc.exe 
     -I"D:\pro-fils_D\compu+MC\C1 mC Projekte\m168D_10\alter_code\aug_08_allgem"
     -I"D:\pro-fils_D\compu+MC\C1 mC Projekte\m168D_10\alter_code\jul_08_allgem" 
     -mmcu=atmega168 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char
     -funsigned-bitfields -fpack-
    struct -fshort-enums -MD -MP -MT m168D_10.o -MF dep/m168D_10.o.d  -c  ../m168D_10.c
    
    avr-gcc.exe -mmcu=atmega168 -Wl,-Map=m168D_10.map m168D_10.o     -o m168D_10.elf
    avr-objcopy -O ihex -R .eeprom  m168D_10.elf m168D_10.hex
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" 
     --change-section-lma .eeprom=0 --no-change-warnings 
     -O ihex m168D_10.elf m168D_10.eep || exit 0
    c:\Programme\WinAVR-20070525\bin\avr-objcopy.exe: there are no sections to be copied!
    avr-objdump -h -S m168D_10.elf > m168D_10.lss
    
    AVR Memory Usage
    ----------------
    Device: atmega168
    
    Program:    6772 bytes (41.3% Full)
    (.text + .data + .bootloader)
    
    Data:        494 bytes (48.2% Full)
    (.data + .bss + .noinit)
    
    
    Build succeeded with 0 Warnings...
     ============================================================ */
    WENN nun die *.h im gleichen (Projekt-) Verzeichnis ist wie Deine haupt*.c mit dem "main"-Modul, dann reicht dieses #include xy.h . . . mehr musst Du nicht machen - den Compiler musst Du nicht mehr sagen - der sucht im aktuellen Verzeichnis ganz von selbst. Und dorthin gehört die *.h ja auch . . . .

    Ich selbst mache für jedes "Programm" eine eigene Projektdatei - in der auch eine Subdirectory "alter code" existiert *ggggg*.

    Ist das so genug verständlich? Oder zuviel Codebeispiel? Zu undurchsichtig?
    Ciao sagt der JoeamBerg

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    03.12.2008
    Alter
    29
    Beiträge
    438
    OK!
    Dann ist jetzt das mit der Headatei klar! Danke für die Infos!

    Jetzt komm ich zu einem weiteren kleinen Problem:
    Ich hab jetzt das RN-Control über den MK3 USB Programmer über die USB schnittstelle mit dem Computer verbunden.
    Dann hab ich diesen Code geschrieben:
    Code:
    #include <avr/io.h>
    
    int main (void)
    {
    DDRB = 0xff;
    PORTB = 0xff;
    
    while (0)
    {}
    return 0;
    }
    Dann hab ich es compiliert (erfolgreich).
    Dann hab ich auf run gedrückt.
    Jedoch steht dann, USB Gerät nicht gefunden...
    Eine LED welche ich an GND und an PINB5 angeschossen habe, sollte dann eigentlich leuchten... Tut sie aber nicht...

    Kann jemand einen Fehler bei meiner vorgehensweise Entdecken?

    Grüsse!

    Grüsse!
    Wer keine Illusionen mehr hat, wird weiterhin existieren, aber aufgefhört haben zu leben.
    (Leonard da Vinci)

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test