logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Komunikacja z komputerem poprzez NetStack z ENC28J60

PanWtorek 26 Mar 2011 16:55 3405 29
  • #1 9325351
    PanWtorek
    Poziom 2  
    Witam,

    Mam problem z uruchomieniem modułu And-Eth opis tutaj, od razu zaznaczam że jestem w tym zielony, trochę bawiłem się uC z wyświetlaczami i innymi zabawkami, ale połączenie uC do kompa to już inna bajka :/ Na początek próbuje uruchomić tylko przykład ze strony tuxgraphics.org według schematu tam zamieszczonego (link ), nie zrobiłem całego układu, chciałem tylko podłączyć ATMEGE88, kod który skompilowałem i wgrałem wygląda następująco:


    /*********************************************
     * vim:sw=8:ts=8:si:et
     * To use the above modeline in vim you must have "set modeline" in your .vimrc
     * Author: Guido Socher
     * Copyright: GPL V2
     *
     * Ethernet remote device and sensor
     *
     * Title: Microchip ENC28J60 Ethernet Interface Driver
     * Chip type           : ATMEGA88 with ENC28J60
     *********************************************/
    #include <avr/io.h>
    #include "ip_arp_udp.h"
    #include "enc28j60.h"
    #include "timeout.h"
    #include "avr_compat.h"
    #include "net.h"
    
    // please modify the following two lines. mac and ip have to be unique
    // in your local area network. You can not have the same numbers in
    // two devices:
    static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24};
    static uint8_t myip[4] = {192,168,0,169};
    static uint16_t myport =1200; // listen port for udp
    // how did I get the mac addr? Translate the first 3 numbers into ascii is: TUX
    
    #define BUFFER_SIZE 250
    static uint8_t buf[BUFFER_SIZE+1];
    
    int main(void){
    
            
            uint16_t plen;
            uint8_t i=0;
            uint8_t payloadlen=0;
            
            // set the clock speed to 8MHz
            // set the clock prescaler. First write CLKPCE to enable setting of clock the
            // next four instructions.
            CLKPR=(1<<CLKPCE);
            CLKPR=0; // 8 MHZ
            
            /* enable PB0, reset as output */
            DDRB|= (1<<DDB0);
    
            /* set output to gnd, reset the ethernet chip */
            PORTB &= ~(1<<PB0);
            delay_ms(20);
            /* set output to Vcc, reset inactive */
            PORTB|= (1<<PB0);
            delay_ms(100);
            
            // LED
            /* enable PB1, LED as output */
            DDRB|= (1<<DDB1);
    
            /* set output to Vcc, LED off */
            PORTB|= (1<<PB1);
    
            /*initialize enc28j60*/
            enc28j60Init(mymac);
            delay_ms(20);
            
            /* Magjack leds configuration, see enc28j60 datasheet, page 11 */
            // LEDB=yellow LEDA=green
            //
            // 0x476 is PHLCON LEDA=links status, LEDB=receive/transmit
            // enc28j60PhyWrite(PHLCON,0b0000 0100 0111 01 10);
            enc28j60PhyWrite(PHLCON,0x476);
            delay_ms(20);
            
            /* set output to GND, red LED on */
            PORTB &= ~(1<<PB1);
            i=1;
            
            //init the ethernet/ip layer:
            init_ip_arp_udp(mymac,myip);
    
            while(1){
                    // get the next new packet:
                    plen = enc28j60PacketReceive(BUFFER_SIZE, buf);
    
                    /*plen will ne unequal to zero if there is a valid 
                     * packet (without crc error) */
                    if(plen==0){
                            continue;
                    }
                    // arp is broadcast if unknown but a host may also
                    // verify the mac address by sending it to 
                    // a unicast address.
                    if(eth_type_is_arp_and_my_ip(buf,plen)){
                            make_arp_answer_from_request(buf,plen);
                            continue;
                    }
                    // check if ip packets (icmp or udp) are for us:
                    if(eth_type_is_ip_and_my_ip(buf,plen)==0){
                            continue;
                    }
                    
                    if (i){
                            /* set output to Vcc, LED off */
                            PORTB|= (1<<PB1);
                            i=0;
                    }else{
                            /* set output to GND, LED on */
                            PORTB &= ~(1<<PB1);
                            i=1;
                    }
    
                            
                    if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){
                            // a ping packet, let's send pong
                            make_echo_reply_from_request(buf,plen);
                            continue;
                    }
                    if (buf[IP_PROTO_P]==IP_PROTO_UDP_V){
                            payloadlen=buf[UDP_LEN_L_P]-UDP_HEADER_LEN;
                            if (buf[UDP_DATA_P]=='t' && payloadlen==5){
                                    make_udp_reply_from_request(buf,"hello",6,myport);
                            }
                    }
            }
            return (0);
    }
    


    Podłączenie pinów od atmegi ze złączem na module And-Eth

    ATMEGA88 -> And-Eth

    PB6(XTAL1) pin9 -> pin1 CLKout
    PD2 (INT0) pin4 -> pin2 /INT
    (MISO) PB4 pin18 -> pin4 SO
    (MOSI) PB3 pin17 -> pin5 SI
    (SCK) PB5 pin19 -> pin6 SCK
    (OC1B) PB2 pin16 -> pin7 /CS
    no i zasilanie 5V

    Dodam jeszcze że Ethernet chyba działa bo diody się świecą (zielona dioda świeci się ciągle a pomarańczowa mruga), ale z jakiś niewiadomych mi przyczyn nie mogę spingować urządzenia, próbowałem go podłączyć zarówno pod router jak i bezpośrednio do kompa, do podglądu używałem WireSharka a do pingowania używałem jakiegoś narzędzia dostępnego na stronie konfiguracji routera, konsoli systemu Windows i dostarczonego wraz z kodem programu udpcom-XP - za każdym razem bez rezultatów. Próbowałem też na wyłączonym firewallu itp. także wina nie powinna leżeć w zablokowanych portach.

    Nie mam już pomysłu na rozwiązanie tego problemu także będę wdzięczy i z góry dziękuje za każdy pomysł :)[url=]Link[/url]
  • #2 9711361
    bendar
    Poziom 14  
    Witam

    Mam podobny problem i chciał bym odświeżyć temat.
    Czy się udało coś ruszyć do przodu ?
  • #3 9711744
    PanWtorek
    Poziom 2  
    Niestety nic się nie udało, mimo wielu prób, sprawdzania przewodów, zmiany układu, kombinacji z fuse'ami albo kwarcami, ech!

    Próbowałem naprawdę wszystkiego na co mogłem wpaść, jeżeli ktoś wie jak rozwiązać problem, proszę o pomoc.
  • #4 9711760
    gaskoin
    Poziom 38  
    A jakie masz taktowanie w tej m88 ?
  • #5 9723912
    bendar
    Poziom 14  
    Używam gotowego oprogramowania ze strony "http://www.tuxgraphics.org/"
    C znam w miarę ale jeszcze nie ogarnąłem wszystkich poleceń z Uc.

    Więc ustawienie fuse bit mam standardowe lf:60 hf:DF
    no i w kodzie jest ustawienie na 8MHz.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Jeszcze zastanawiałem się nad napięciami bo podaje delikatnie ponad 5V czy tu też nie robię błędu.
  • #6 9724018
    piotrva
    VIP Zasłużony dla elektroda
    Nie, o ile to nie 6V ;-)
    Ja ten moduł uruchomiłem w C od pierwszego kopa na kodach z książki http://atnel.pl/wydawnictwo
    Cóż, nie wiem co jeszcze może być nie tak...
    Ale tak:
    1. enc28j60 jest na tych samych pinach co programator - spróbuj odpiąć programator, bo niektóre programatory zakłócają pracę
    2. jak długie przewody między procesorem i enc28j60?
    3. czy nie masz gdzieś w pobliżu kabli linii prądu AC?
    4. czy próbowałeś podłączać układ do routera zarówno kablami zwykłymi jak i cross?
  • #7 9724048
    bendar
    Poziom 14  
    No własnie a masz może jakiś gotowy wsad do atmega88 by chociaż ping sprawdzić czy idzie?

    A przewody od enc28j60 do atmega88 mają około 15-20cm.
    Jeśli chodzi o przewody to próbowałem tak i tak tzn. krosowany i nie krosowany.
  • #8 9724107
    piotrva
    VIP Zasłużony dla elektroda
    1. Wsadu do m88 nie mam, bo na takim procku nie testowałem - robiłem testy jedynie na m168, m644p, m1280, m2560
    2. A co z programatorem? Odłączałeś go?
  • #9 9724149
    bendar
    Poziom 14  
    Tak odłączyłem. Wszystko testuje odłączone. Sam już nie wiem czy to wina kodu, napięcia czy połączenia.
    Jest może jakaś możliwość sprawdzenia samego układu Enc28j60 bo generalnie działa po podłączeniu do karty sieciowej świeci się zielona dioda potem trochę mruga pomarańczowa i też jak próbuje ping też mruga ale odpowiedzi nie ma?

    A możesz mi udostępnić ten kod na m168?
  • #10 9724150
    gaskoin
    Poziom 38  
    bendar napisał:
    Używam gotowego oprogramowania ze strony "http://www.tuxgraphics.org/"
    C znam w miarę ale jeszcze nie ogarnąłem wszystkich poleceń z Uc.

    Więc ustawienie fuse bit mam standardowe lf:60 hf:DF
    no i w kodzie jest ustawienie na 8MHz.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Jeszcze zastanawiałem się nad napięciami bo podaje delikatnie ponad 5V czy tu też nie robię błędu.


    wg Twoich fuse bitów masz ustawione na zewnętrzy generator zegarowy. W takim przypadku Xtal2 jest zwykłym portem PB7 a do Xtal1 podłącza się właśnie ów generator. Wątpię, że masz takowy podłączony więc wątpię też, że w ogóle cokolwiek Ci działa.

    Btw, wydaje mi się, że 8 MHz to może być dla enc troszkę za mało.
  • #11 9724171
    piotrva
    VIP Zasłużony dla elektroda
    gaskoin, słuszna uwaga.
    1. co do kodu, to sprawdziłem i mam w tej chwili gotowe kody w C tylko na m644p... Jak chcesz mogę podesłać na PW hexa
  • #12 9725197
    bendar
    Poziom 14  
    słuszna uwaga gaskoin troszkę się zakręciłem ale mam ustawione na m88 lf:62 hf:DF

    Jeszcze jedno pytanie jeśli bym miał ustawie na zewnętrze taktownie to ten wpis z C mam sens bytu ? Bo na układzie z ENC28J60 jest rezonator 25 MHz czy to nie za dużo ?

    piotrva no niestety ten hex mi raczej nie pomoże bo dysponuje m8, m88 oraz m16 . Myślałem sprawdzić to na jakimś gotowym wsadzie by wykluczyć kilka błędów.
  • #13 9725890
    gaskoin
    Poziom 38  
    bendar napisał:
    Jeszcze jedno pytanie jeśli bym miał ustawie na zewnętrze taktownie to ten wpis z C mam sens bytu ? Bo na układzie z ENC28J60 jest rezonator 25 MHz czy to nie za dużo ?


    No właśnie, żeby komunikacja po SPI działała po ludzku trzeba chyba CONAJMNIEJ 12 MHz
  • #14 9739654
    bendar
    Poziom 14  
    Witam po krótkiej przerwie.

    Powalczyłem trochę z tym układem i wnioski jakie mogę wysunąć to to że, układ ENC28J60 zachowuje się tak samo z podłączonym Uc jak i bez.
    Skróciłem przewody między ENC28J60 a Uc podałem napięcie nie przekraczające 5 V (około 4,92 V).

    Jeszcze opiszę podłączenie:

    ENC28J60   SO <--->  PB4 atmega88
                    SI <--- >  PB3
                  SCK <--->   PB2
                   CS <--->  PB5
    


    Już brak mi pomysłów na okiełznanie tego układu.
    Macie może jakiś gotowy hex lub kod w C który by był na 100% działający bo to już jedyny pomysł który mi się na suwa na myśl.
  • #15 9742771
    tro.ol
    Poziom 11  
    Bawiłem się tym razem z kolegą i już to kiedyś uruchomiłem, wtedy zbudowaną mieliśmy płytkę od podstaw ze strony tuxGraphics i połączyliśmy z Atmega16. Po małych bataliach pięknie hulało. Korzysta on teraz z tego do zapalania światła w pokoju przez Wifi w komorce : )

    Testowałem zaś tą płytkę AND-ETH v2, i mogę wysnuć następujące myśli. Choć od razu zaznaczę, że nie udało mi się go uruchomić, mimo że podobno to tylko 5min:)

    Po pierwsze takie luźne myśli, które mogą pomóc w przyszłosci.
    *Złączka Ethernetowa domyślnie wraz z układem Enc28j60, po zasilaniu GND i VCC, już jest przystosowana do odbierania pakietów. Stąd te mryganie pomarańczowej diodki (mignięcie to przychodzący pakiet).
    *wg mnie nie działa do dlatego bo jest błąd transmisji SPI. Nie ma komunikacji między uProcesorem i a Enc28j60. Transmisja szeregowa SPI w tych przykladach zadeklarowana jest programowo jako Master dla uProcesora, i dla różnych procesorów trzeba okreslac w pliku Enc28j60.c dobre ustawienie PINow wg dokumentacji(datasheet) dla CS,MISO,MOSI i SCK.

    Wydaje mi się, że nie jest istotne na jąką częstotlowość jest ustawiony uProcesor, ponieważ SPI jest transmisją szeregową wyzwalaną zegarem. Czyli od strony Enc28j60 nie jest istotna szybkosc nadchodzących danych, bo prawdopodobnie trafiają one do jakiegoś bufora. Ale może być tak, że Enc28j60 , ma określoną swoją szybkość transmisji zwrotnej SPI, która wymusza na uProcesorze ustawienie szybszego taktowania.

    Enc28j60 ma taktowanie zewnetrzne 25MHz
    Stąd tu pytanie.
    Czy ktoś wie jaki powinien mieć taktowanie uProcesor?
    Wydaje mi się ze wlasnie problem może tkwić w taktowaniu.
  • #16 9742826
    bendar
    Poziom 14  
    tro.ol okazuję się że walczymy z tym samym problemem :D też jestem posiadaczem tego układu.

    A jak można zdiagnozować działanie SPI od strony uC ? Bo przecież mikro kontroler jakoś inicjuje ten proces.
  • #17 9744404
    piotrva
    VIP Zasłużony dla elektroda
    Ojojoj, namieszaliscie;-)
    1. Taktowanie uP teoretycznie bez znaczenia, ale żeby płynnie działało zalecam minimum 12mhz, najlepiej 16.
    2. Zegar SPI jest generowany przez procesor i to on determinuje prędkość - enc nic nie może wymusić...
    3. Ja moduł w Bascom uruchamiałem 2 mies. A w C poszło w 30 min
    4. Jak długie masz przewody i czy tak samo zachowuje się po odpieciu programatora?
    5. Jutro postaram się wrzucić kod w C pod m644p i m16, ale nie sprawdzę tego z m16 na żywo, bo ją z kolei m16 nie mam
  • #18 9747364
    bendar
    Poziom 14  
    nie wiem czy to istotne ale na tym układzie AND-ETH v2 jest kwarc o częstotliwości 25MHz a w dokumentacji od atmega88 opisują że można go taktować do 20Mhz
  • #19 9748054
    Tomek-85
    Poziom 14  
    Myślę, że producent scalaka wie lepiej jaki maksymalny kwarc można mu "zasadzić" -> Link
  • #20 9748339
    piotrva
    VIP Zasłużony dla elektroda
    Enc28j60 traktowany jest 25MHz, ale na clkout daje sygnał z programowalnego dzielnika, który soft w pprocku ustawia zazwyczaj na 12,5MHz.
    Ps. Sorry, dziś nie dałem rady z tym softemx bo jest na innym pc.
  • #21 9752017
    tro.ol
    Poziom 11  
    Jedne ważne pytanie, czy ktoś wie kto w transmisji SPI ma być Master a kto slave?

    W przykładach jest niby że Enc pracuje jako Slave, a Atmega jako master
    
    	// initialize SPI interface
    	// master mode and Fosc/2 clock:
            SPCR = (1<<SPE)|(1<<MSTR);
            SPSR |= (1<<SPI2X);


    Czy nie powinno być czasami tak, że Masterem jest Enc?
  • #22 9752096
    bendar
    Poziom 14  
    Na pewno atmega będzie masterem.
  • #23 9753565
    piotrva
    VIP Zasłużony dla elektroda
    Tak, atmega jest masterem, nie kombinujcie na prawdę ludzie...
    W załączniku przetestowany i działający na atmega32 i 644p kod.
    Załączniki:
  • #24 9753690
    bendar
    Poziom 14  
    Zastanawiam mnie czy ta linijka z aktywacją SPI w trybie master nie powinna wyglądać tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #25 9753812
    piotrva
    VIP Zasłużony dla elektroda
    W naszym przypadku to nie ma znaczenia, poza tym sprawdzał Kolega, czy kod działa?
    Bo jak mówię, mnie na m644p a mojemu koledze na m32 działał aż miło...
  • #26 9754812
    bendar
    Poziom 14  
    Sprawdziłem to na m16 i nie działa. Myślę że to wina ENC coś musi być nie tak z tym układem :|
  • #27 9755121
    piotrva
    VIP Zasłużony dla elektroda
    Hmm, mnie się nie zdarzyło żeby był uszkodzony. Skoro kolega kable i programator wyeliminował ( mam nadzieję że to sprawdzone 100 razy) to może m16 ma za mało ramu i stos psuje zmienne... Czy ma Kolega możliwość nabycia do testów m644p? Ew. Polecam (w ramach testu układu) wykonać polecenia z zalaczonego na stronie and techu tutoriala w Bascom...
  • #28 9790879
    bendar
    Poziom 14  
    Po długich bojach i rozpoczęciu kursu Bascom dla tego układu And-eth już zwątpiłem w swoje umiejętności dalej układ poza ślepym miganiem w gnieździe RJ 45 nic nowego nie komunikował tak że w Wireshark.... Wiec w rozpaczy zamówiłem drugi układ ale od innego sprzedawcy skompilowałem źródła ze strony tuxgraphics org na m88 podłączyłem bez rezonatora zewnętrznego i wszystko działa aż miło. Co było przyczyną do końca nie wiem na pewno coś z układem :). Teraz postaram się uruchomić układ z rezonatorem zewnętrznym.
  • #29 9791035
    piotrva
    VIP Zasłużony dla elektroda
    Hmm, a pisałeś do firmy And-tech? Może rzeczywiście coś z układem?
  • #30 9791153
    bendar
    Poziom 14  
    Nie pisałem bo zależało mi na czasie jak znajdę paragon to odezwę się do nich.
REKLAMA