AT mega 328p mit Studio 4 und WinAVR-20100110

Gast #3394332
Lesenswert?

Peter Dannegger schrieb:
> Einen ATmega328 gibt es nicht.

aber ich finde den bei Atmel:
http://www.atmel.com/devices/atmega328.aspx

den p natürlich auch

mein Problem, ich kann mit dem mega168 im Studio 4 fehlerfrei 
kompilieren, mit dem 328p aber nicht obwohl beide iomxxx.h vorhanden 
sind includet offensichtlich über io.h nur einen 168 aber nicht dem 328p

kann da jemand helfen ?

liegts am Studio 4 oder am WinAVR-20100110
Gast #3397345
Lesenswert?

holger schrieb:
> Fehlermeldungen zeigen.
> Komplettes Projekt als ZIP im Anhang posten.

ich versuche es mal auszugsweise, wird sonst zu komplex

also den Code mit ATmega168 in den config settings im projekt 
funktioniert es, das warning wird ausgegeben:

    #warning defined (_AVR_ATmega168_)
    #warning defined (_AVR_ATmega328p_)

in usart.h
1
/*----------------------------------------------------------------------------
2
 Copyright:      Radig Ulrich  mailto: mail@ulrichradig.de
3
 Author:         Radig Ulrich
4
 Remarks:        
5
 known Problems: none
6
 Version:        24.10.2007
7
 Description:    RS232 Routinen
8
 Dieses Programm ist freie Software. Sie können es unter den Bedingungen der 
9
 GNU General Public License, wie von der Free Software Foundation veröffentlicht, 
10
 weitergeben und/oder modifizieren, entweder gemäß Version 2 der Lizenz oder 
11
 (nach Ihrer Option) jeder späteren Version. 
12
 Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, 
13
 daß es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, 
14
 sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT 
15
 FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License. 
16
 Sie sollten eine Kopie der GNU General Public License zusammen mit diesem 
17
 Programm erhalten haben. 
18
 Falls nicht, schreiben Sie an die Free Software Foundation, 
19
 Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. 
20
------------------------------------------------------------------------------*/
21

22
#ifndef _UART_H
23

24
  #define _UART_H
25
.....
26
.....
27
.....
28
#include <avr/io.h>
29
.....
30
.....
31
.....
32
  #if defined (__AVR_ATmega88__) || defined (__AVR_ATmega168__) || defined (__AVR_ATmega328p__)
33
    
34
    #warning defined (__AVR_ATmega168__)
35
    #warning defined (__AVR_ATmega328p__)
36
    #define USR UCSR0A
37
    #define UCR UCSR0B
38
    #define UBRR UBRR0L
39
    #define TXEN TXEN0
40
    #define RXEN RXEN0
41
    #define RXCIE RXCIE0
42
    #define UDR UDR0
43
    #define UDRE UDRE0
44
    #define USART_RX USART_RX_vect   
45
  #endif

ich sehe im io.h eingebunden wird m168.h oder aber die #defines aus 
usart.h werden übernommen

aber wenn ich im projekt den m328p eintrage gibt es Fehler:
../usart/usart.c:81: error: 'UCR' undeclared (first use in this 
function)

es erscheint auch nicht mehr "mein" warning
    #warning defined (_AVR_ATmega168_)
    #warning defined (_AVR_ATmega328p_)
#3397362
Lesenswert?

Thomas Eckmann schrieb:
> jar schrieb:> defined (_AVR_ATmega328p_)
>
> Diese Definition gibt es auch nicht, sondern _AVR_ATmega328P_.
> mfg.

aber das mache nicht ich ! das kommt doch aus Projekt Options wenn ich 
den 328p wähle

atmega328p

so stehts in den Projekt Options gewählt -> kleines p
im pulldown Menü

wie doof ist das denn ?

verbessert in P in defines und es geht !

Danke
Angehängte Dateien:
#3397440
Lesenswert?

Joachim B. schrieb:
> Thomas Eckmann schrieb:
>> jar schrieb:> defined (_AVR_ATmega328p_)
>>
>> Diese Definition gibt es auch nicht, sondern _AVR_ATmega328P_.
>> mfg.
>
> aber das mache nicht ich ! das kommt doch aus Projekt Options wenn ich
> den 328p wähle
>
> atmega328p
>
> so stehts in den Projekt Options gewählt -> kleines p
> im pulldown Menü
>
> wie doof ist das denn ?
>
> verbessert in P in defines und es geht !
>
> Danke

Ja, das sind die kleinen Gemeinheiten. Aber jetzt weisst du das ja und 
das wird dir so schnell nicht wieder passieren.

Hier ist die vollständige Familie:
1
#if defined (__AVR_ATmega48__) | defined (__AVR_ATmega48P__) | (__AVR_ATmega48PA__) | defined (__AVR_ATmega48A__)\
2
| defined (__AVR_ATmega88__) | defined (__AVR_ATmega88P__) | (__AVR_ATmega88PA__) | defined (__AVR_ATmega88A__)\
3
| defined (__AVR_ATmega168__) | defined (__AVR_ATmega168P__) | (__AVR_ATmega168PA__) | defined (__AVR_ATmega168A__)\
4
| defined (__AVR_ATmega328__) | defined (__AVR_ATmega328P__)

mfg.
#3398019
Lesenswert?

Thomas Eckmann schrieb:
> Hier ist die vollständige Familie:
> #if defined (_AVR_ATmega48_) | defined (_AVR_ATmega48P_) \
> | (_AVR_ATmega48PA_) | defined (_AVR_ATmega48A_) \
> | defined (_AVR_ATmega88_) | defined (_AVR_ATmega88P_) \
> | (_AVR_ATmega88PA_) | defined (_AVR_ATmega88A_) \
> | defined (_AVR_ATmega168_) | defined (_AVR_ATmega168P_) \
> | (_AVR_ATmega168PA_) | defined (_AVR_ATmega168A_) \
> | defined (_AVR_ATmega328_) | defined (_AVR_ATmega328P_)

aber warum so ?

mit einem | binäres ODER

statt mit 2 || logisches ODER
#if defined (_AVR_ATmega88_) || defined (_AVR_ATmega168_) \
|| defined (_AVR_ATmega328_) || defined (_AVR_ATmega328P_)

???

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren