Homepage

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

Atmega1280 und Ulis Stack

Ihr habe noch Fragen zum AVR Webmodule? Dann seit Ihr hier genau richtig!
Antworten
  • Druckansicht
Erweiterte Suche
8 Beiträge • Seite 1 von 1
sorcerer
Beiträge: 16
Registriert: 20.06.2008, 18:02:21

Atmega1280 und Ulis Stack

  • Zitieren

Beitrag von sorcerer » 13.02.2009, 20:12:51

Hallo Leute,

nachdem ich keinen xMega ergattern konnte (brauche mehr I/Os) und ich mir als Anfänger eine zu große Architekturänderung auch nicht zutraue habe ich in wochenlanger fitzelarbeit ein Board für einen Atmega1280 erstellt. (Wenn es einer haben mag nachdem die schlimmsten Fehler gefunden sind (ein Leiterbahnschnitt und eine Brücke sinds schon..) stell ich es natürlich gerne hier rein!)

Aufgelötet ist nun auch alles, aber die Softwareänderungen bereiten mir als relativem Anfänger doch einige Probleme.

Habe nun mal rausgesucht, wo es alles was zu ändern oder einzufügen gibt. Ich will einfach nur einmal das Board pingen können ;)

Usart.h/c: hab ich vorerst weggelassen, da auf meinem Board keine ist, geht ja über telnet

Timer.h:

Code: Alles auswählen

#if defined (__AVR_ATmega1280__)
        #define TIMSK TIMSK1
#endif
Sollte wohl so passen, der atmega1280 hat laut Datenblatt auf jedenfall ein TIMSK1. In timer.c hab ich nichts weiter geändert, ein extclock hab ich nicht.

networkcard/enc28j60.h:

Code: Alles auswählen

        
#define ENC28J60_PIN_SCK        1
#define ENC28J60_PIN_MISO       3
#define ENC28J60_PIN_MOSI       2
//#define ENC28J60_PIN_SS         4
#define ENC28J60_PIN_CS         4
Hier hab ich alles auf die neue Situation angepasst, CS liegt bei mir auf PORTB.4, SS ist nicht belegt, es gibt keine anderen Komponenten, die noch über SPI kommunizieren sollen

Code: Alles auswählen

       
#if defined (__AVR_ATmega1280__)
           #define ETH_INT_ENABLE  EIMSK |= (1<<INT3)
           #define ETH_INT_DISABLE EIMSK &= ~(1<<INT3)
#endif
Der ENC hängt an INT3, EIMSK hab ich in der atmega1280 doc gefunden, scheint genauso zu funktionieren wie beim 644er

Code: Alles auswählen

#define ETH_INTERRUPT           INT3_vect
Entsprechend an INT3 angepasst

networkcard/enc28j60.c

Code: Alles auswählen

nur den SS Pin aus der Initialisierung genommen.
stack.h

Code: Alles auswählen

#if defined (__AVR_ATmega1280__)
        #define MAX_TCP_ENTRY 5
        #define MAX_UDP_ENTRY 5
        #define MAX_ARP_ENTRY 5
        #define MTU_SIZE 1200
#endif
makefile:

Code: Alles auswählen

MCU = atmega1280
AMCU = m1280

ifeq ($(MCU), atmega1280)
        #FUSE_BITS = -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m
        HEX_FILE_NAME = MEGA1280
endif

So, alles in allem compiliert es, aber rühren tut sich leider nix mitm ethernet... :(

Hat evtl. schon jemand Ulrichs Stack auf einem mega1280 verwendet?
Bin ein klein wenig hilflos...
Das Board sollte hardwaremäßig io sein, Programmierung funktioniert einwandfrei, Leitungen hab ich soweit auch alle durchgemessen.


Grüße

Tom
Nach oben

sorcerer
Beiträge: 16
Registriert: 20.06.2008, 18:02:21

Re: Atmega1280 und Ulis Stack

  • Zitieren

Beitrag von sorcerer » 16.02.2009, 11:39:55

So, bin ein Stück weiter vorgedrungen, was das debugging (muss das leider mit dem ein- und ausschalten einer led machen ;) ) des Codes betrifft. Leider geht garnichts, aber ein Lickblicht: Ich hab zumindest die erste Stelle gefunden, an der alles hängt:

Code: Alles auswählen

void enc28j60_spi_write_word(unsigned char hi, unsigned char lo)
{

        ENC28J60_CS_LO(); //select enc28j60
        SPDR = hi; //shift hi data out

        while(!(SPSR & (1<<SPIF))); //wait for completion

        SPDR = lo; //shift lo data out

        while(!(SPSR & (1<<SPIF))); //wait for completion
   << Hier kommter nichtmehr hin! >>

        ENC28J60_CS_HI(); //deselect enc28j60
}
In der Schleife über der Markierung bleibt er hängen. Aber SPI scheint dann doch zu funktionieren, wenn er das erste Byte erfolgreich geschrieben bekommt?

Es ist gleich der erste Aufruf dieser Funktion mittels

enc28j60_spi_write_word (ENC28J60_SOFT_RESET, ENC28J60_SOFT_RESET);

wo er hängen bleibt.


Grüße
Nach oben

sorcerer
Beiträge: 16
Registriert: 20.06.2008, 18:02:21

Re: Atmega1280 und Ulis Stack

  • Zitieren

Beitrag von sorcerer » 16.02.2009, 12:39:18

Mädels, es tut! :-)

Der Hänger lag an mir, SPI schaltet auf slave und funktioniert nimmer, wenn der SS Pin ein Eingang ist. D.h. der 1280er funktioniert soweit mit den selben Paramtern (auch fuses passen) wie der Mega644.

Grüße!
Nach oben

Benutzeravatar
Ulrich
Site Admin
Beiträge: 3054
Registriert: 29.02.2004, 18:12:19
Wohnort: Siegen
Kontaktdaten:
Kontaktdaten von Ulrich
Website

Re: Atmega1280 und Ulis Stack

  • Zitieren

Beitrag von Ulrich » 16.02.2009, 18:09:08

Dann sollte fast alles andere auch klappen ;-)
Nach oben

sorcerer
Beiträge: 16
Registriert: 20.06.2008, 18:02:21

Re: Atmega1280 und Ulis Stack

  • Zitieren

Beitrag von sorcerer » 16.02.2009, 18:43:00

Ja, alle Komponenten funktionieren hervorragend! :-)

Jetzt hab ich noch eine kleine Performanceanregung, die bei mir den Durchsatz bei "größeren" Datenstreams um 20% verbessert hat:

Hab die enc28j60_write_buffer Methode durch die folgende ersetzt, damit gibt es nicht so lange Wartezeiten zwischen den einzelnen Bytes, da alle Arbeiten für das nächste Byte schon erledigt werden bevor dann auf SPI gewartet wird:

Code: Alles auswählen

//write enc28j60 buffer
void enc28j60_write_buffer(unsigned char *buffer, unsigned int len)
{
        //select enc28j60
        ENC28J60_CS_LO();

        //send write cmd & wait for finish:
        SPDR = ENC28J60_OP_WRITE_BUF_MEM;

        do{
                //send data
                uint8_t data = *buffer;
                buffer++;
                while(!(SPSR & (1<<SPIF)));
                SPDR = data;
        }while(--len);

        while(!(SPSR & (1<<SPIF)));

        //deselect enc28j60
        ENC28J60_CS_HI();
}

Grüße!
Nach oben

ljmarkus
Beiträge: 15
Registriert: 24.01.2009, 20:08:52
Kontaktdaten:
Kontaktdaten von ljmarkus
ICQ

Re: Atmega1280 und Ulis Stack

  • Zitieren

Beitrag von ljmarkus » 26.02.2009, 23:50:08

Hallo..

ich bin auch auf den 1280 umgestiegen, habe aber leider ein Problem.

Nach dem Start des Webservers, sendet er per UDP ein richtiges Packet, so wie es auch sein soll.

Nur, ich kann nicht per PING oder HTTP oder TELNET auf ihn zugreifen.
Auch der WTT schlägt nach 1200 sekunden zu.

Wenn ich mit Oszi messe, liegt SCK nach dem Senden immer auf LOW und CS immer HIGH und INT immer auf LOW.


Folgende Anderungen habe ich gemacht:

enc28j60.h

Code: Alles auswählen

	#define ENC28J60_DDR		DDRB
	#define ENC28J60_PORT		PORTB
	
	#define ENC28J60_PIN_SCK	1
	#define ENC28J60_PIN_MISO	3
	#define ENC28J60_PIN_MOSI	2
	#define ENC28J60_PIN_SS		0
	#define ENC28J60_PIN_CS		4

	#if defined (__AVR_ATmega1280__)
		#define ETH_INT_ENABLE 	EIMSK |= (1<<INT5)
		#define ETH_INT_DISABLE EIMSK &= ~(1<<INT5)
	#endif

	#define ETH_INTERRUPT 		INT5_vect
stack.h , makefile, timer.h wurden auch angepaßt.

Über Uart mit "ver" bekomme ich: ENC28J60-Version 5
Beschriftung auf dem ENC lautet: 07212JV

Nutzte WinAVR 200712121 mit GCC 4.2.2

Wo kann der Fehler liegen ?

Danke, Markus
Nach oben

ljmarkus
Beiträge: 15
Registriert: 24.01.2009, 20:08:52
Kontaktdaten:
Kontaktdaten von ljmarkus
ICQ

Re: Atmega1280 und Ulis Stack

  • Zitieren

Beitrag von ljmarkus » 27.02.2009, 14:08:30

Hallo

so habe das Problem gefunden.

Wenn INT5 genutzt wird muss man in der "stack.c" noch folgendes ändern:

Code: Alles auswählen

void eth_get_data (void)

{ 	

	if(eth.timer)

	{

		tcp_timer_call();

		arp_timer_call();

		eth.timer = 0;

	}	

	if(eth.data_present)

	{

	#if USE_ENC28J60

		while( (PINB &(1<<PB2)) == 0)

		{	

	#endif

------------ snip
in 
while( (PINE &(1<<PE5)) == 0)

ändern.
lg, markus
Nach oben

Löti
Beiträge: 13
Registriert: 01.05.2009, 12:03:47

Re: Atmega1280 und Ulis Stack

  • Zitieren

Beitrag von Löti » 01.05.2009, 12:24:43

Moin,

bin auch am Überlegen, mir ein ATMega128-Board aufzubauen, da ich mehr I/O-Ports brauche. Hast du dein Projekt jetzt laufen? Gibt es dazu Software und evtl. Eagleunterlagen. Dann müsste ich das Rad nicht neu erfinden.

mfg Löti
Nach oben

Antworten
  • Druckansicht

8 Beiträge • Seite 1 von 1

Zurück zu „AVR-Webmodule“



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

Powered by phpBB® Forum Software © phpBB Limited

Deutsche Übersetzung durch phpBB.de

Datenschutz | Nutzungsbedingungen

 

 

sitemap  |    |  datenschutz   |  impressum