-         
Ergebnis 1 bis 9 von 9

Thema: Studio 7, ATmega328PB und C bringt Fehlermeldung

  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.934

    Studio 7, ATmega328PB und C bringt Fehlermeldung

    Anzeige

    Ein kurzes Programm in C soll einen ATmega328PB@20MHz dazu bringen auf dem PORTD den PD1 ein- und wieder auszuschalten.
    Code:
      uint8_t i;            //
      DDRD  = 0b00111111;   // -> siehe Schaltplan
      PORTD = 0b11000011;   //    Pins/Pull Ups aktivieren
    
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      for(i=0; i<100; i++)  // LED1(PD1) blinken lassen
        PORTD |=  (1<<PD1); // PD1 ein
        wms(3);             // ###>>> HeartbeatLEDs schalten Aode -<|- Portpin <<<###
        PORTD &= ~(1<<PD1); // PD1 aus
        wms(97);            //
      }                     // Ende von for(i=0; i<100; i++)
    Es gibt zahlreiche Fehlermeldungen:
    Code:
    Severity    Code    Description    Project    File    Line
    Error        (Each undeclared identifier is reported only once    C_m328pbtst    D:\D_pro-fils\compu_MC\C7\C_m328pbtst\C_m328pbtst\main.c    117
    Warning        #warning "device type not defined"    C_m328pbtst    c:\winavr-20100110\avr\include\avr\io.h    404
    Error        MCU 'atmega328pb' supported for assembler only    C_m328pbtst    D:\D_pro-fils\compu_MC\C7\C_m328pbtst\C_m328pbtst\main.c    1
    Warning        unused variable 'abc'    C_m328pbtst    D:\D_pro-fils\compu_MC\C7\C_m328pbtst\C_m328pbtst\main.c    43
    Error        'DDRD' undeclared (first use in this function)    C_m328pbtst    D:\D_pro-fils\compu_MC\C7\C_m328pbtst\C_m328pbtst\main.c    117
    Error        for each function it appears in.)    C_m328pbtst    D:\D_pro-fils\compu_MC\C7\C_m328pbtst\C_m328pbtst\main.c    117
    Error        'PORTD' undeclared (first use in this function)    C_m328pbtst    D:\D_pro-fils\compu_MC\C7\C_m328pbtst\C_m328pbtst\main.c    118
    Error        'PD1' undeclared (first use in this function)    C_m328pbtst    D:\D_pro-fils\compu_MC\C7\C_m328pbtst\C_m328pbtst\main.c    123
    Error        'PD' undeclared (first use in this function)    C_m328pbtst    D:\D_pro-fils\compu_MC\C7\C_m328pbtst\C_m328pbtst\main.c    128
    Error        recipe for target 'main.o' failed    C_m328pbtst    D:\D_pro-fils\compu_MC\C7\C_m328pbtst\C_m328pbtst\Debug\Makefile    79

    Die auffälligste ist für mich :

    Error MCU 'atmega328pb' supported for assembler only

    Ist es so (kann das sein), dass der mega328PB mit Studio7 nur in Assembler programmierbar ist? Dann müsste ich für diesen Chip ne andere IDE besorgen?

    Danke für die Hilfe.
    Geändert von oberallgeier (03.06.2019 um 18:29 Uhr) Grund: Oh mei, Schreib- und Aufmerksamkeitsfehler : PORTD und nicht ~B
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.036
    Hallo, hab den 328PB auch schon mit dem Studio 7 geproggt.
    Das geht natürlich auch in C.
    Man muss aber in der IDE den richtigen Controller bereits auswählen und dem auch sagen, das es sich um ein C executable Projekt handelt.
    Leg einfach noch mal ein neues Projekt an und probier das noch mal.
    Hast Du auch die richtige AVR Datei includiert?
    Auch die Library delay.h ist zu includieren - du benutzt ja delay Routinen.
    Vorher muss aber die F_CPU defined werden, sonst gehen die _delay's nicht!
    #define F_CPU 20000000

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.934
    .. 328PB .. schon mit dem Studio 7 geproggt. .. Man muss aber in der IDE den richtigen Controller bereits auswählen und dem auch sagen, das es sich um ein C executable Projekt handelt .. Auch die Library delay.h ist zu includieren .. Vorher muss aber die F_CPU defined werden ..
    Ich war ja sicher, dass ich das so gemacht hatte - aber was heißt das schon. Also alles nochmal - genau nach Kochbuch und mit dieser Quelle:

    Code:
    /*
     * Cm328PB-04.c
     *
     * Created: 04.06.2019 17:43:36
     * Author : bbt
     */ 
    // ============================================================================= =
    // ============================================================================= =
    
      #define F_CPU 20000000
    
      #include <avr/io.h>
      #include <avr/delay.h>
    
    // ============================================================================= =
    // ============================================================================= =
    //      ### Programm pausieren lassen  !! Der Pausenwert ist nur experimentell !!
      void wms(uint16_t ms)
     {
       for(; ms>0; ms--)
        {
          uint16_t __c = 2000;
          __asm__ volatile (
          "1: sbiw %0,1" "\n\t"
          "brne 1b"
          : "=w" (__c)
          : "0" (__c)       );
        }
     }              //
    // ============================================================================= =
    // ============================================================================= =
    
    
    // ============================================================================= =
    // ============================================================================= =
    int main(void)
    {                       /* Replace with your application code */
      uint8_t i;            //
    // - - - - - - - - - - - - - - -
    // Ports+Pins als Ein- (0) od Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
    //      A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp
    //
      DDRB  = 0b01111111;   // siehe aktuell oben
      PORTB = 0b10000000;   //    und Port/Pull Ups (1)  aktivieren
    //              =
      DDRC  = 0b11111111;   // PC0..7
      PORTC = 0b00000000;   //
    //
      DDRD  = 0b00111111;   // -> siehe Schaltplan
      PORTD = 0b11000011;   //    Pull Ups aktivieren, NICHT bei extINT0/~1
                            //
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      for(i=0; i<1000; i++) // LED(PD1) blinken lassen bevor Interrupts erlaubt sind,
      {                     //   um ungewollte Resets u.ä. besser erkennen zu können
        PORTD |=  (1<<PD1); // rtLED=PD1 ein
        wms(970);           // ###>>> LED(s) schalten Aode -<|- Portpin <<<###
        PORTD &= ~(1<<PD1); // rtLED=PD1 aus
        wms(30);            //
      }                     // Ende von for(i=0; i<1000; i++)
      PORTD  =  ~(1<<PD1);  // rtLED/ auf JEDEN Fall aus
                            //
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      while (1) 
      {
      }
     }              // Ende
    // ============================================================================= =
    // ============================================================================= =
    Und . . . es geht nicht. Fehlermeldungen:

    Code:
    Severity    Code    Description    Project    File    Line
    Error        for each function it appears in.)    Cm328PB-04    D:\D_pro-fils\compu_MC\C7\Cm328PB-04\Cm328PB-04\main.c    43
    Error        MCU 'atmega328pb' supported for assembler only    Cm328PB-04    D:\D_pro-fils\compu_MC\C7\Cm328PB-04\Cm328PB-04\main.c    1
    Error        'DDRB' undeclared (first use in this function)    Cm328PB-04    D:\D_pro-fils\compu_MC\C7\Cm328PB-04\Cm328PB-04\main.c    43
    Error        (Each undeclared identifier is reported only once    Cm328PB-04    D:\D_pro-fils\compu_MC\C7\Cm328PB-04\Cm328PB-04\main.c    43
    Error        'PORTB' undeclared (first use in this function)    Cm328PB-04    D:\D_pro-fils\compu_MC\C7\Cm328PB-04\Cm328PB-04\main.c    44
    Error        'DDRC' undeclared (first use in this function)    Cm328PB-04    D:\D_pro-fils\compu_MC\C7\Cm328PB-04\Cm328PB-04\main.c    46
    Error        'PORTC' undeclared (first use in this function)    Cm328PB-04    D:\D_pro-fils\compu_MC\C7\Cm328PB-04\Cm328PB-04\main.c    47
    Error        'DDRD' undeclared (first use in this function)    Cm328PB-04    D:\D_pro-fils\compu_MC\C7\Cm328PB-04\Cm328PB-04\main.c    49
    Error        'PORTD' undeclared (first use in this function)    Cm328PB-04    D:\D_pro-fils\compu_MC\C7\Cm328PB-04\Cm328PB-04\main.c    50
    Error        'PD1' undeclared (first use in this function)    Cm328PB-04    D:\D_pro-fils\compu_MC\C7\Cm328PB-04\Cm328PB-04\main.c    55
    Mal ein Versuch: im File *.cproj den Button [Cange Device...] klicken, nen mega328P auswählen, F7 drücken, flashen, fertig. Es blinkt - etwa 1x pro Sekunde. Wie beabsichtigt. Sieht aus wie erwartet - nur eben als mega328P :-/

    Vermutlich findet der Compiler keinen passenden File zum mega328PB - und ich (ich Blödel) habe das Installationsprogramm von meinem (alten) Atmel Studio 7 (Version: 7.0.1417) gelöscht . . . Leider - weil ich einfach den Neuigkeiten/den Jungs von microchip ziemlich misstrauisch gegenüberstehe. Aber ob das wirklich ein Fehler im System ist oder meine falsche Bedienung wage ich nun überhaupt nicht zu behaupten.
    Ciao sagt der JoeamBerg

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.532
    Blog-Einträge
    127
    Keine Ahnung, ob das was hilft da ich selber V7 nicht nutze aber update Hinweise gefunden habe:
    https://www.avrfreaks.net/forum/atme...ot-supported-7 führt auf:
    http://packs.download.atmel.com/
    und da wird bei "Atmel ATmega Series Device Support (1.3.300)" der ATmega328PB mit aufgeführt.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.036
    Dein Code hatte noch einen Fehler in der delay.h definition.
    Hab nun noch die Studio eigenen Delay Routinen Verwendet - Läuft bei mir Problemlos und Linked ohne Fehler.
    Code:
    /*
     * pb328_test.c
     *
     * Created: 04.06.2019 20:50:03
     * Author : USER
     */ 
    
    #define F_CPU 20000000
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    
    // ============================================================================= =
    int main(void)
    {                       /* Replace with your application code */
        uint8_t i;            //
        // - - - - - - - - - - - - - - -
        // Ports+Pins als Ein- (0) od Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
        //      A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp
        //
        DDRB  = 0b01111111;   // siehe aktuell oben
        PORTB = 0b10000000;   //    und Port/Pull Ups (1)  aktivieren
        //              =
        DDRC  = 0b11111111;   // PC0..7
        PORTC = 0b00000000;   //
        //
        DDRD  = 0b00111111;   // -> siehe Schaltplan
        PORTD = 0b11000011;   //    Pull Ups aktivieren, NICHT bei extINT0/~1
        //
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        for(i=0; i<1000; i++) // LED(PD1) blinken lassen bevor Interrupts erlaubt sind,
        {                     //   um ungewollte Resets u.ä. besser erkennen zu können
            PORTD |=  (1<<PD1); // rtLED=PD1 ein
            _delay_ms(970);//970
                           // ###>>> LED(s) schalten Aode -<|- Portpin <<<###
            PORTD &= ~(1<<PD1); // rtLED=PD1 aus
            _delay_ms(30);  //30
                  //
        }                     // Ende von for(i=0; i<1000; i++)
        PORTD  =  ~(1<<PD1);  // rtLED/ auf JEDEN Fall aus
        //
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        while (1)
        {
        
        }
    }              // Ende
    // ============================================================================= =
    // ============================================================================= =
    Da Du ja anscheinend Interupts verwenden willst hab ich auch gleich die Interrupt.h mit included.

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.934
    Dein Code hatte noch einen Fehler in der delay.h definition. Hab nun noch die Studio eigenen Delay Routinen Verwendet - Läuft .. Problemlos und Linked ohne Fehler .. die Interrupt.h mit included.
    Danke für Deine Mühe. Das Ergebnis ist "wie immer". Kompilieren, flashen und Tests laufen für mega328PB wie immer - mit immer den gleichen Störungsmeldungen, insbes.:
    Error MCU 'atmega328pb' supported for assembler only
    Mit Anwählen des mega328P läuft - wie immer - alles korrekt und wie gewollt.
    Ein kleiner Unterschied ist dabei - mit den Bibliotheks-delay-Routinen dauert ne Millisekunde rund doppelt so lange . . .

    Aktuell will ich das Atmel Studio7 vom Rechner entfernen, Neustart, neues Studio7 installieren (nur würde ich das gern mit der alten Atmel-Version machen - die ich nicht mehr habe) und dann ein neuer Versuch. Der PB hat einfach so viele Features die ich gern mal nutzen möchte!

    Vielen Dank für die Hilfe und Unterstützung.
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.036
    Ein kleiner Unterschied ist dabei - mit den Bibliotheks-delay-Routinen dauert ne Millisekunde rund doppelt so lange . . .
    ... Dann läuft dein Controller mit dem falschen Takt.
    Ich vermute mal mit 8MHz, oder wenn's im Simulator ist, falsche Taktgeschwindigkeit eingestellt.
    Bei den delay Zeiten wird die F_CPU Frequenz mit verrechnet.

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.934

    Wie man es dreht und wendet - das eingangs beschriebene Problem besteht weiter

    .. Dann läuft dein Controller mit dem falschen Takt .. Bei den delay Zeiten wird die F_CPU Frequenz mit verrechnet.
    Ja, das weiß ich.

    Der falsche Takt war mir vorher schon aufgefallen - aber das hat ja nun garnix damit zu tun, dass die IDE Atmel Studio 7 penetrant die beschriebenen Fehlermeldungen ausgibt und sich weigert (m)einen klitzekleinen Quellcode für nen mega328PB zu compilieren.

    Die Taktfrage ist erledigt / die Geschichte stimmt mittlerweile. Aber, wie´s oben steht - das ist nicht das Problem. Das eingangs erwähnte Problem besteht immer noch.
    Ciao sagt der JoeamBerg

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.036
    Das eingangs erwähnte Problem besteht immer noch
    Ich vermute auch, das es sich dabei um einen Fehler in der IDE handelt.
    Also mal ne neue Installation probieren.
    Studio 7 basiert übrigens auf Microsoft Visual Studio - Eventuell liegt ja auch da der Hund begraben.

Ähnliche Themen

  1. RN-Control AVR-Studio Winavr AVRISP MKII Fehlermeldung
    Von tomschmied im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 7
    Letzter Beitrag: 18.02.2011, 11:27
  2. AVR-Studio Simulator - EEPROM Auslesen bringt immer 0xFF
    Von Jaecko im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 18.09.2009, 14:56
  3. AVR Studio 4 mit winAVR bringt seltsame Fehler beim build
    Von karmek im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 20.10.2007, 09:50
  4. AVR - Studio Fehlermeldung
    Von Goblgobl im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 10.03.2007, 20:17
  5. Antworten: 10
    Letzter Beitrag: 28.01.2007, 16:58

Berechtigungen

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