Homepage

  • Projekte
  • Shop
  • Forum
Erweiterte Suche
  • Schnellzugriff
    • Unbeantwortete Themen
    • Aktive Themen
    • Suche
  • FAQ
  • Anmelden
  • Registrieren
  • Foren-Übersicht
  • Suche

Wechsel von ATMega32 auf ATMega644

Ethernet Mega32 Experimentierboard
Antworten
  • Druckansicht
Erweiterte Suche
20 Beiträge
  • Vorherige
  • 1
  • 2
Klaus
Beiträge: 406
Registriert: 17.02.2008, 12:18:39

Re: Wechsel von ATMega32 auf ATMega644

  • Zitieren

Beitrag von Klaus » 28.04.2010, 13:54:05

Hi,

PORTA_OUTTGL

damit wird ein spezielles Register im XMEGA angesprochen. Dadurch wird ein (mehrere) Bit(s) des entsprechenden Ports Invertiert.

Also hier ändert sich bei jedem Aufruf der Wert eines Bits 0->1->0->1 ....

Das muß man jetzt nicht im Code haben, ist aber eine Nette Anzeige ob die Software noch ordentlich läuft.

mfg
Klaus
Nach oben

Benutzeravatar
Birgert
Beiträge: 33
Registriert: 15.04.2010, 20:47:13
Wohnort: Kreuzung BAB3 und B470

Re: Wechsel von ATMega32 auf ATMega644

  • Zitieren

Beitrag von Birgert » 01.05.2010, 14:09:59

Klaus hat geschrieben:
Und wenn Du schonmal im xMega-Forum bist kannst ja gleich mal Testen ob die "1.2.5 XM" nach Anpassung in den üblichen Dateien wieder auf den 644er läuft. Ich habe mir da einiges an Mühe gegeben um die xMega-Unterstützung hinzuzufügen ohne die "alte" Software zu verändern.
Und hier kommen meine ersten Erkenntnisse dazu, damit's auf dem ETH_M32_EX läuft:

Code: Alles auswählen

Klaus XMega-1_2_5 Stack auf dem ETH_M32_EX in Betrieb nehmen

Schritt für Schritt von Birger Töpelmann aufgelistet



VORAUSSETZUNGEN:

Installiertes WinAVR und AVR_Studio4

elektrisch funktionierendes ETH_M32_EX mit Mega644 bzw. Mega644P



TESTEN DES ORIGINALPROJEKTS:

Ein Doppelklick auf "xmega_net_io.aps" im Dateiverzeichnis des entpackten XMega-1_2_5 sollte das AVR Studio starten, in dem dann die zuletzt geöffneten Sourcedateien in Fenstern geöffnet werden.



Mit "Build Active Configuration" (Taste "F7") sollte das Projekt fehlerfrei compiliert werden:

Build started 1.5.2010 at 10:34:38
avr-gcc  -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99   -D__atxmega32a4__    -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT base64.o -MF dep/base64.o.d  -c  ../base64.c
avr-gcc  -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99   -D__atxmega32a4__    -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT cmd.o -MF dep/cmd.o.d  -c  ../cmd.c
avr-gcc  -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99   -D__atxmega32a4__    -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT enc28j60.o -MF dep/enc28j60.o.d  -c  ../enc28j60.c
avr-gcc  -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99   -D__atxmega32a4__    -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT httpd.o -MF dep/httpd.o.d  -c  ../httpd.c
avr-gcc  -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99   -D__atxmega32a4__    -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT main.o -MF dep/main.o.d  -c  ../main.c
avr-gcc  -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99   -D__atxmega32a4__    -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT ntp.o -MF dep/ntp.o.d  -c  ../ntp.c
avr-gcc  -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99   -D__atxmega32a4__    -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT stack.o -MF dep/stack.o.d  -c  ../stack.c
avr-gcc  -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99   -D__atxmega32a4__    -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT telnetd.o -MF dep/telnetd.o.d  -c  ../telnetd.c
avr-gcc  -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99   -D__atxmega32a4__    -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT timer.o -MF dep/timer.o.d  -c  ../timer.c
avr-gcc  -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99   -D__atxmega32a4__    -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT usart.o -MF dep/usart.o.d  -c  ../usart.c
avr-gcc  -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99   -D__atxmega32a4__    -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT analog.o -MF dep/analog.o.d  -c  ../analog.c
avr-gcc  -mmcu=atxmega32a4 -Wall -gdwarf-2 -std=gnu99   -D__atxmega32a4__    -DF_CPU=32000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT memory.o -MF dep/memory.o.d  -c  ../memory.c
avr-gcc -mmcu=atxmega32a4  base64.o cmd.o enc28j60.o httpd.o main.o ntp.o stack.o telnetd.o timer.o usart.o analog.o memory.o    -lc -lm  -o xmega_net_io.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature  xmega_net_io.elf xmega_net_io.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex xmega_net_io.elf xmega_net_io.eep || exit 0
avr-objdump -h -S xmega_net_io.elf > xmega_net_io.lss

AVR Memory Usage
----------------
Device: atxmega32a4
Program:   30988 bytes (84.1% Full)
(.text + .data + .bootloader)
Data:       2020 bytes (49.3% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings...


PROJEKT UMSTELLEN AUF ETH_M32 mit Mega644:

AVR Studio Menu -> Project -> Configuration Options -> neues Dialogfenster
	General -> Device von "atxmega32a4" auf "atmega644" (oder atmega644p) umstellen
        	-> Frequency von "32000000" auf tatsächliche Quarzfrequenz ändern, "16000000"
	Custom Options -> in der rechten Listbox die Zeile "-D__atxmega32a4__" markieren;
	               -> Button "Edit" 
	               -> Zeile im Textfeld ändern in "-D__atmega644__"
	               -> Button "Add"
Project Options Dialog mit "OK" beenden.

Wird das Projekt jetzt mit "F7" compiliert, gibt es etliche Fehler und Warnungen:

rm -rf base64.o cmd.o enc28j60.o httpd.o main.o ntp.o stack.o telnetd.o timer.o usart.o analog.o memory.o  xmega_net_io.elf dep/* xmega_net_io.hex xmega_net_io.eep xmega_net_io.lss
Build succeeded with 0 Warnings...
avr-gcc  -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums  -D__atmega644__  -MD -MP -MT base64.o -MF dep/base64.o.d  -c  ../base64.c
avr-gcc  -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums  -D__atmega644__  -MD -MP -MT cmd.o -MF dep/cmd.o.d  -c  ../cmd.c
../cmd.c: In function 'write_eeprom_ip':
../cmd.c:151: warning: implicit declaration of function 'eeprom_is_ready'
avr-gcc  -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums  -D__atmega644__  -MD -MP -MT enc28j60.o -MF dep/enc28j60.o.d  -c  ../enc28j60.c
avr-gcc  -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums  -D__atmega644__  -MD -MP -MT httpd.o -MF dep/httpd.o.d  -c  ../httpd.c
../httpd.c: In function 'httpd_header_check':
../httpd.c:268: error: request for member 'OUT' in something not a structure or union
../httpd.c: In function 'httpd_data_send':
../httpd.c:509: error: request for member 'OUT' in something not a structure or union
../httpd.c:512: error: request for member 'OUT' in something not a structure or union
../httpd.c:515: error: request for member 'OUT' in something not a structure or union
../httpd.c:518: error: request for member 'OUT' in something not a structure or union
../httpd.c:545: error: request for member 'IN' in something not a structure or union
../httpd.c:548: error: request for member 'IN' in something not a structure or union
../httpd.c:551: error: request for member 'IN' in something not a structure or union
../httpd.c:554: error: request for member 'IN' in something not a structure or union
make: *** [httpd.o] Error 1

Build failed with 9 errors and 1 warnings...


ANPASSUNGEN IN SOURCEDATEIEN 
Änderungen an den Original Sourcen sind mit //#bt, Ergänzungen mit //+bt kommentiert
Die Definition PORTA_OUTTGL ist bei den XMega MCUs, aber nicht bei normalen Mega MCUs vorhanden.
Unterscheidung der ZielPlattform
#ifdef PORTA_OUTTGL
	Ziel_MCU = XMega;
#else
	Ziel_MCU = Mega;
#endif

CONFIG.H 
Portdefinitionen anpassen (siehe Kommentare //+bt)
Build active configuration -> 18 Errors und eine Warnung

MAIN.C
Funktion void configureSystemClock(void) wird beim normalen Mega nicht benötigt?!
und die FlackerLed mit PORTA_OUTTGL wollen wir vorerst auch nicht.
!! Build?

TIMER.C
PORTA_OUTTGL per Definition deaktivieren
!! Build?

CMD.C
Klaus hat die eeprom.h durch eine memory.h ersetzt. 
Also memory.h nur bei xmega, sonst eeprom.h

auch in der main.c angepasst.

!! Build funktioniert jetzt zwar, aber da ist noch eine Warnung!!!
../cmd.c: In function 'write_eeprom_ip':
../cmd.c:156: warning: implicit declaration of function 'eeprom_wr_byte'

also in CMD.C doch auch die memory.h einbinden...

Build started 1.5.2010 at 13:10:28
avr-gcc  -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums  -D__atmega644__  -MD -MP -MT cmd.o -MF dep/cmd.o.d  -c  ../cmd.c
avr-gcc  -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums  -D__atmega644__  -MD -MP -MT main.o -MF dep/main.o.d  -c  ../main.c
avr-gcc -mmcu=atmega644  base64.o cmd.o enc28j60.o httpd.o main.o ntp.o stack.o telnetd.o timer.o usart.o analog.o memory.o    -lc -lm  -o xmega_net_io.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature  xmega_net_io.elf xmega_net_io.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex xmega_net_io.elf xmega_net_io.eep || exit 0
avr-objdump -h -S xmega_net_io.elf > xmega_net_io.lss

AVR Memory Usage
----------------
Device: atmega644

Program:   29798 bytes (45.5% Full)
(.text + .data + .bootloader)
Data:       2020 bytes (49.3% Full)
(.data + .bss + .noinit)

Build succeeded with 0 Warnings...

Also Burn-O-Mat gestartet -> Hexfile ausgewählt (AVR...\XMega-1_2_5\default\xmega_net_io.hex) und geschrieben.

Im verbundenen Terminal kommt eine Meldung:
System Ready
Compiliert am May  1 2010 um 13:10:29
Compiliert mit GCC Version 4.3.3
IP   192.168.0.99
MASK 255.255.255.0
GW   192.168.0.1
NTP Err.

und im Firefox lässt sich die Webseite öffnen.
in config.h müssen natürlich diese IO-Ports angeglichen werden:
// Input, Output für Digital IO (httpd)
die Nachbesserungen in config.h

Code: Alles auswählen

/*----------------------------------------------------------------------------
 Copyright:      Radig Ulrich  mailto: mail@ulrichradig.de
 Author:         Radig Ulrich
 Remarks:        Zeilen mit //+bt == Ergänzungen, mit //#bt == Änderungen 
 				 von Birger Töpelmann 1.5.'10 (Birgert) für Mega644 auf ETH_M32_EX
 				 zum evtl Einpflegen in Klaus' XMega1_2_5 Projekt
 known Problems: none
 Version:        03.11.2007
 Description:    Webserver Config-File

 Dieses Programm ist freie Software. Sie können es unter den Bedingungen der 
 GNU General Public License, wie von der Free Software Foundation veröffentlicht, 
 weitergeben und/oder modifizieren, entweder gemäß Version 2 der Lizenz oder 
 (nach Ihrer Option) jeder späteren Version. 
 Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, 
 daß es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, 
 sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT 
 FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License. 
 Sie sollten eine Kopie der GNU General Public License zusammen mit diesem 
 Programm erhalten haben. 
 Falls nicht, schreiben Sie an die Free Software Foundation, 
 Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. 
------------------------------------------------------------------------------*/

#ifndef _CONFIG_H_
	#define _CONFIG_H_	
	//ETH_M32_EX (www.ulrichradig.de)
	#define USE_ENC28J60	1
	//Holger Buss (www.mikrocontroller.com) Mega32-Board
	#define USE_RTL8019	0	//nicht für xmega

// siehe Remarks
  #ifdef PORTA_OUTTGL //+bt Spezielle Definition für xmega
	// Input, Output für Digital IO (httpd)
	#define OUT_PORT_A	PORTA.OUT
	#define OUT_PORT_B	PORTB.OUT
	#define OUT_PORT_C	PORTC.OUT
	#define OUT_PORT_D	PORTD.OUT
	#define OUT_PORT_E	PORTE.OUT
	#define IN_PORT_A	PORTA.IN
	#define IN_PORT_B	PORTB.IN
	#define IN_PORT_C	PORTC.IN
	#define IN_PORT_D	PORTD.IN
	#define IN_PORT_E	PORTE.IN
  #else //+bt
	#define OUT_PORT_A	PORTA //+bt
	#define OUT_PORT_B	PORTB //+bt
	#define OUT_PORT_C	PORTC //+bt
	#define OUT_PORT_D	PORTD //+bt
//	#define OUT_PORT_E	PORTE //+bt
	#define IN_PORT_A	PINA //+bt
	#define IN_PORT_B	PINB //+bt
	#define IN_PORT_C	PINC //+bt
	#define IN_PORT_D	PIND //+bt
//	#define IN_PORT_E	PINE //+bt
  #endif //+bt

	//Konfiguration der PORTS (HEX)
	//1=OUTPUT / 0=INPUT
	#define OUTA 		0x0F
	#define OUTB 		0x00
	#define OUTC 		0x00
	#define OUTD 		0x00
	//Achtung!!!! an PORTB ist der ENC - xMega32 an PortC
	//nur ändern wenn man weiß was man macht!

    	//Watchdog timer for the ENC2860, resets the stack if timeout occurs
    	#define WTT 		1200 //Watchdog timer in timer interrupt

    	//NTP refresh before stack timeout occurs...
    	#define NTP_REFRESH 	1140

	//Umrechnung von IP zu unsigned long
	#define IP(a,b,c,d) ((unsigned long)(d)<<24)+((unsigned long)(c)<<16)+((unsigned long)(b)<<8)+a

	//IP des Webservers und des Routers
	#define MYIP		IP(192,168,0,99)
    	#define ROUTER_IP	IP(192,168,0,1)

	//Netzwerkmaske
	#define NETMASK		IP(255,255,255,0)
	
    	//DHCP-Server
    	#define USE_DHCP    	0 //1 = DHCP Client on
  
    	//DNS-Server
    	#define USE_DNS     	0 //1 = DNS Client on
    	#define DNS_IP 	     	IP(192,168,0,1)
    
	
	//IP des NTP-Servers z.B. Server 1.de.pool.ntp.org
	#define USE_NTP		1 //1 = NTP Client on
	#define NTP_IP		IP(77,37,6,59)
	
	//Broadcast-Adresse für WOL
	#define USE_WOL		0 //1 = WOL on
	#define WOL_BCAST_IP	IP(192,168,0,255)
	#define WOL_MAC		{0x00,0x1A,0xA0,0x9C,0xC6,0x0A}
	
	//MAC Adresse des Webservers	
	#define MYMAC1	0x00
	#define MYMAC2	0x20
	#define MYMAC3	0x18
	#define MYMAC4	0xB1	
	#define MYMAC5	0x15
	#define MYMAC6	0x6F
	
	//Taktfrequenz
  	#ifndef F_CPU
  	/*! \brief Define default CPU frequency, if this is not already defined. */
  	  #define F_CPU 32000000UL
	//#define F_CPU 20000000UL
    	//#define F_CPU 16000000UL	
	//#define F_CPU 14745600UL
	//#define F_CPU 11059200UL
	//#define F_CPU  2000000UL
  	#endif


	//Timertakt intern oder extern
	#define EXTCLOCK 	1 //0=Intern 1=Externer Uhrenquarz

	//Baudrate der seriellen Schnittstelle
	#define BAUDRATE 	9600
	
	//LCD Routinen mit einbinden
	#define USE_SER_LCD	0
	//LCD im 4Bit Mode oder seriell
	#define USE_LCD_4Bit	0

	//AD-Wandler benutzen?
	#define USE_ADC		1

	//Kamera mit einbinden
	//Kamera arbeitet nur mit einem 14,7456Mhz Quarz!
	#define USE_CAM		0
	#define USE_SERVO	0
	//In cam.c können weitere Parameter eingestellt werde
	//z.B. Licht, Kompression usw.
	//Auflösungen
	//0 = 160x120 Pixel kürzer (zum testen OK ;-)
	//1 = 320x240 Pixel ca. 10 Sek. bei einem Mega644
	//2 = 640x480 Pixel länger (dauert zu lang!)
	#define CAM_RESOLUTION	0
	
	//Webserver mit Passwort? (0 == mit Passwort)
	#define HTTP_AUTH_DEFAULT	0
	
	//AUTH String "USERNAME:PASSWORT" max 14Zeichen 
	//für Username:Passwort
	#define HTTP_AUTH_STRING "admin:uli1"
    	//#define HTTP_AUTH_STRING "user:pass"
	

    	//Email vesand benutzen? Konfiguration des
    	//Emailclient in der Sendmail.h
    	#define USE_MAIL        0
    
    	//Empfang von Wetterdaten auf der Console (über HTTP_GET)
    	#define GET_WEATHER     0
    
    	//Commandos und Ausgaben erfolgen über Telnet
    	#define CMD_TELNET      0
    
#endif //_CONFIG_H
Xmega_ETHM32.zip
Das Original Projekt (Version 1_2_5) findet man hier http://www.ulrichradig.de/forum/viewtop ... =43&t=1801
Danke Klaus
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Nach oben

Klaus
Beiträge: 406
Registriert: 17.02.2008, 12:18:39

Re: Wechsel von ATMega32 auf ATMega644

  • Zitieren

Beitrag von Klaus » 01.05.2010, 16:43:17

Birgert hat geschrieben:also in CMD.C doch auch die memory.h einbinden...
Das kommt daher das die ursprüngliche Funtion in Stack.c zu finden war. Die hab ich in memory.c verschoben da ich der Meinung war das die dort besser aufgehoben ist.

Ist jedenfalls eine gute Beschreibung zur Umrüstung des Codes.

mfg
Klaus
Nach oben

dreamon
Beiträge: 47
Registriert: 01.02.2006, 00:42:32

Re: Wechsel von ATMega32 auf ATMega644

  • Zitieren

Beitrag von dreamon » 02.05.2010, 21:14:42

Also ich hab jetzt nochmal einen Timer, blauäugig gesetzt. Und der tut sogar. 924mal in 2Sekunden. (hab nen Counter mitlaufen lassen also nur ne Schätzung.)

Aber wenn man grob 500 Timer Interrupts Pro sekunde rechnet kommt man mit 20ms ganz gut hin. Erfasse nun alle 3 Takte auf auf einmal. Mit ByteNeu&~ByteAlt geht das ganz gut.

Ich werd mal die Praxistauglichkeit testen. Aber immerhin läuft es. Hab nen avr-gcc fehler entdeckt. Der hat mich heute bestimmt 3Stunden gekostet. Hab immer gedacht ich hab nen Programmierfehler gemacht. Der weil hat gcc mir nen Streich gespielt.

Naja.. Was soll.

Mal schauen wies weitergeht. Mich würde noch interessieren was man machen muß das der Browser der den Webserver anzeigt regelmäßig refresht so alle 50Sekunden wäre was.
Nach oben

Benutzeravatar
ala42
Beiträge: 2
Registriert: 02.06.2010, 16:19:51

Re: Wechsel von ATMega32 auf ATMega644

  • Zitieren

Beitrag von ala42 » 23.06.2010, 01:01:06

dreamon hat geschrieben:Mich würde noch interessieren was man machen muß das der Browser der den Webserver anzeigt regelmäßig refresht so alle 50Sekunden wäre was.
Dazu baust Du folgendes in die Webseite ein:

Code: Alles auswählen

<meta http-equiv="refresh" content="50">
Nach oben

Antworten
  • Druckansicht

20 Beiträge
  • Vorherige
  • 1
  • 2

Zurück zu „ETH_M32_EX“



  • Foren-Übersicht
  • Alle Zeiten sind UTC+01:00
  • Alle Cookies löschen

Powered by phpBB® Forum Software © phpBB Limited

Deutsche Übersetzung durch phpBB.de

Datenschutz | Nutzungsbedingungen

 

 

sitemap  |    |  datenschutz   |  impressum