PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Studio 7, ATmega328PB und C bringt Fehlermeldung



oberallgeier
03.06.2019, 17:59
Ein kurzes Programm in C soll einen ATmega328PB@20MHz dazu bringen auf dem PORTD den PD1 ein- und wieder auszuschalten.

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:

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\Mak efile 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.

wkrug
04.06.2019, 08:39
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

oberallgeier
04.06.2019, 18:20
.. 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:


/*
* 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:


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.

Searcher
04.06.2019, 18:29
Keine Ahnung, ob das was hilft da ich selber V7 nicht nutze aber update Hinweise gefunden habe:
https://www.avrfreaks.net/forum/atmega328pb-still-not-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

wkrug
04.06.2019, 21:03
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.

/*
* 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.

oberallgeier
05.06.2019, 08:45
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.

wkrug
05.06.2019, 11:29
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.

oberallgeier
05.06.2019, 14:30
.. 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.

wkrug
05.06.2019, 16:01
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.