Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

MMnet01 i NutOs problemy

debbuger 19 Apr 2008 13:57 12108 52
e-mierniki
  • #1
    debbuger
    Level 10  
    Witam
    Pierwszy problem jaki mam to kompilacja WinAVR. Zainstalowałem WinAVR-20070525 a natępnie ethernut-4.4.1 i uruchomiłem Configurator. Tam dodałem plik MMnet01.conf i w ustawieniach ustawiłem ścieżki i Platforme avr-gcc oraz Tool Path (c:\ethernut-4.4.1\nut\tools\win32;c:\WinAVR-20070525\bin;
    c:\WinAVR-20070525\utils\bin;c:\ethernut-4.4.1\nut\include;)
    i dałem Build NutOS. Kompilacja przebiegła poprawie. Teraz chciałem napisać następujący program:

    Code:
    #include <dev/board.h>
    
    #include <stdio.h>
    #include <avr/io.h>
    #define UART_SPEED 38400

    main()
    {
       u_long baudrate = UART_SPEED;
       NutRegisterDevice (&DEV_DEBUG,0,0);
       freopen (DEV_DEBUG_NAME,"w",stdout);
       ioctl(fileno(stdout),UART_SETSPEED,&baudrate);
       printf("Hello, world!\n");
       for(;;);
    }


    przy próbie kompilacji dostamłem następujący wykaz błedów:
    >
    Quote:
    "make.exe" all
    -------- begin --------
    avr-gcc (GCC) 4.1.2 (WinAVR 20070525)
    Copyright (C) 2006 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


    Linking: Ethernut.elf
    avr-gcc -mmcu=atmega128 -I. -gstabs -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=Ethernut.o -std=gnu99 -Wundef -MMD -MP -MF .dep/Ethernut.elf.d Ethernut.o --output Ethernut.elf -Wl,-Map=Ethernut.map,--cref -lm
    c:/winavr-20070525/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm128.o: In function `__vectors':
    ../../../../../avr-libc-1.4.6/crt1/gcrt1.S:51: undefined reference to `main'
    Ethernut.o: In function `NutAppMain':
    Ethernut.c:9: undefined reference to `devDebug0'
    Ethernut.c:9: undefined reference to `devDebug0'
    Ethernut.c:9: undefined reference to `NutRegisterDevice'
    Ethernut.c:10: undefined reference to `freopen'
    Ethernut.c:11: undefined reference to `fileno'
    Ethernut.c:11: undefined reference to `ioctl'
    make.exe: *** [Ethernut.elf] Error 1

    > Process Exit Code: 2
    > Time Taken: 00:04

    Pytanie co jest nie tak dlaczego kompilator nie widzi bibliotek ?

    Dodano po 11 [minuty]:

    Drugi problem to uruchomienie modułu MMnet01.
    Układ nie odpowiada na wysyłany ping 10.0.0.9 (producent twierdzi że to domyślny adres) (w PC jest ustawiony adres 10.0.0.12) Nie można też nawiązać połączenia przez RS232 i tym samy zmienić jakiś parametrów w tym adresu IP. Jedyne co działa to: Jest widoczne połączenie sieciowe i na wyświetlaczu LCD są następujące informacje o inicjalizacji i że sterowniki są sprawne oraz że jest zajęte 49k pamięci RAM.
    Proszę o ewentualne sugestie.

    Proszę umieszczać listingi programów w znacznikach "Code". [c_p]
  • e-mierniki
  • #2
    jdn
    Level 12  
    A spróbuj:
    Code:
    int main(void)


    Polecam Discoverer gdy chcesz widzieć ustawienienia sieci ethernuta, może Ci się uda, że ktoś nie wyłączył podczas kompilacji a wtedy się dowiesz jakie IP i resztę ma płytka.(czasem trzeba poczekać i warto włączyć wiresharka by podglądać co się dzieje w sieci).
    Jeśli masz tylko goły main to nie licz na wiele poza zwykłą avr-ką, zobacz sobie przykład httpd tam można podejrzeć jak postawić prosty serwer, przeważnie po instalacji ethernut warto ten przykład przekompilować i wgrać, działa w 99%.Jeśli Ci się nie udaje kompilacja spawdź PATH systemowe(w System,Zaawansowane,Zmienne Środowiskowe chyba tak było) musisz mieć ethernuta ścieżkę plus dwie winavr.
    Jeśli masz mmnet01 to musisz w conf(w programie configurator) zmienić by mieć wogóle lcd po kompilacji nowego kodu poszukaj gdzieś HD4470 i tam rozwiń wpisz poprawne wartości potem make all, on wtedy zmieni w plikach include tą informację za Ciebie i można wtedy dość prosto.
    Code:

       NutRegisterDevice(&devLcd, 0, 0) ;
       lcd =fopen("lcd","w") ;
       fprintf(lcd, "Ether dziala\n mgr");

    I dzięki temu masz lcd jako zwykły strumień.
    Jeśli chodzi o źródła to poszukaj czy masz DHCP włączone o wiele łatwiej z nim sprawa wygląda ale jest jeden dość duży błąd musisz mieć nowego ethernuta chyba 4.4.1 by czekał dłużej niż 65sekund na serwer i nie usnął gdy go nie znajdzie.
    Polecam wejść na stronę ethernuta i przeszukać forum, najłatwiej wpisać w google Ethernut i co Nas martwi ale po angielsku. Jest kilka stron polaków, którzy strony prowadzą po ang. Ale tam są tylko kody :-)
    Pozdrawiam i życzę dużo wytrwałości.
    Pamiętaj też że w Ethernucie nie da się domyślnie zabić wątku więc nie otwieraj za dużo bo każdy automatycznie dostaje pamięć :-)
    Polecam też poszukać NutAPI jest tam spis wszystkich funkcji i zmiennych, często przy przykładach z opisów z neta są stare nazwy zmiennych przez co kompilator sie pluje, w NutAPI są aktualne i jeśli jakaś jest nie zalecana to napisane co powinno się użyć. (np teraz jest "sig_INTERRUPT4" a było "SIG_...").

    Dodano po 2 [minuty]:

    popatrz sobie w includy z przykładów podepnij najwyżej więcej niż myślisz a wtedy nie będziesz miał problemu. Bo masz za mało nagłówków. Jakich poszukaj w NutAPI nazwy funkcji zmiennych o które się upomina i tam jest napisane jaki plik trzeba dopiąć.
  • #3
    debbuger
    Level 10  
    Dzięki za pomoc. Udalo mi się uruchomić to.
    Jeśli chodzi o wyświetlacz LCD to w konfiguratorze nie ma hd447080 przynajmniej nie widzę ale wystarczy wpisać to jako #include i kompilacja przechodzi. Ale nie dziala poza tym to przypomina pisanie w PC'ie a gdzie podejście sprzętowe gdzie są podpięte sygnaly E RS D4 D5 D6 D7 gdzie to można ustawić na którym porcie?????

    Aha i pytanko jak dokompilować dodatki adds do tego bo to jakaś straszna zabawa z makefile makedef makerule i z wierszem polecenia jak ktoś wie to niech to napisze pokolei

    Dodam tylko instalacje przechodzią tylko wersje ethernut4.4.1 i WinAVR20070525 bo inne wersje plują blędami
  • #4
    jdn
    Level 12  
    by móc korzystać z hd4.. musisz napisać #include <dev/hd44780.h>
    wybór portów robisz w configuratorze, dokładnie architecture->avr->hd447 driver , tam ustawiasz robisz potem build Nut/OS i masz wyświetlacz, jak będziesz używał kodu takiego jak w poście powyżej. Tu jest właśnie wygoda w tym systemie wszystkie zmiany robisz w programie configurator a on za Ciebie podpina sterowniki itd. Ciebie to nie interesuje.
    Wybrałeś dobra winavr też na niej działam bo na nowszych nie bedzie działało, w tej chwili zmieniają już by chodziło ale to jeszcze potrwa.

    Sprzętowo najlepiej pisać sterowniki zgodne z Ethernutem.
    Ja obecnie zastanawiam się co mogę jeszcze poza ESC_CLR używać w fprintf gdy używam lcd, nie mogę gdzieś dogrzebac się w dokumentacji ani w kodach gdzie to jest ustawione i co jeszcze jest dostępne. Sprawdź czy w kodzie nie masz jakiejś pętli która nie daje czasu systemowi. Warto dodać co trochę NutSleep(100); Wtedy nigdy jeden wątek nie zje całego procesora.
  • #5
    debbuger
    Level 10  
    Wielkie dzięki dla jdn bo uświadomim mi coś na co jeszcze nie wpadlem rzeczywiście w (Architecture->AVR->HD44780 Driver) można ustawić odpowiedni port klikając z prawej strony na puste pole co nie jest zbyt intuicyjne. W takim razie mam pytanie o co chodzi z Short delay i Long delay trzeba to zaznaczyć jak tak to co bo mi dziala bez tego. Mam też pytania do wyświetlacza o komendy np jak przejść do następnej lini czy wpisać jeden znak w określone miejsce

    Nadal podtrzymije też pytanie jak do tego dokompilować zestaw dodatków adds propoxu bo u mnie pluje to blędami i wogóle przestaje dzialać

    A teraz z innej beczki: chodzi o DHCP
    Mam modem ADSL Thomson (Speedtouch) i ustawilem w nim przydzial zewnętrzego IP jeśli chodzi o PC'a to dziala bez zarzutu i można postawić sobie server. Natomiast jeśli chodzi o MMnet01 to nic ciemno glucho dziala tylko w sieci lokalnej bez DHCP. Mam też pytanie o DEV_ETHER_NAME to domyślenie oznacz "eth0" a w modemie mam "ethport1" ma to jakieś znaczenie program wygląda tak:

    Code:


    #include <cfg/os.h>

    #include <stdio.h>
    #include <string.h>
    #include <io.h>

    #include <dev/board.h>
    #include <dev/urom.h>

    #include <sys/version.h>
    #include <sys/thread.h>
    #include <sys/timer.h>
    #include <sys/heap.h>
    #include <sys/confnet.h>
    #include <sys/socket.h>
    #include <sys/atom.h>

    #include <arpa/inet.h>

    #include <pro/dhcp.h>
    #include <pro/httpd.h>

    #include <dev/hd44780.h>


    #define UART_BAUDRATE 115200


    #define MAC_ADDR { 0x00, 0x16, 0xD4, 0xCC, 0xCF, 0xA7 }
    #define MY_IP_ADDR "192.168.0.16"
    #define MY_NETMASK "255.255.255.0"
    #define MY_GATEWAY "192.168.0.1"

    #define USE_DHCP

    char string[32]="Wellcome to MMnet01";
    char volatile sets;


    //obsluga ASP
    static int ASPCallback (char *pASPFunction, FILE *stream)
    {
        if (strcmp(pASPFunction, "usr_date") == 0) {
            fprintf(stream, "uruchomiono 07.06.2008");
            return(0);
        }

        if (strcmp(pASPFunction, "usr_time") == 0) {
            fprintf(stream, "o godzinie 17:15:32");
            return(0);
        }
       if (strcmp(pASPFunction, "specialtxt") == 0) {
            fprintf(stream, string);
            return(0);
        }
        return (-1);
    }
    // nowy tekst dla wyswietlacza LCD
    static char lcd_text[128];

    THREAD (lcd_scrolling, args)
    {
        int len, x=0, dx = 1, i;

        printf("Poczatek watku lcd_scrolling!\n\r");

        for(;;)
        {

       len = strlen(lcd_text);

       if(len<16) // tekst krotszy niz 16 znakow? dopelniamy do 16 spacjami
       {
           for(i=len;i<16;i++) lcd_text[i] = ' ';
           lcd_text[16] = 0;
       }

       if(x>len - 16) // przesuwanie tekstu
       {
           x = 0;
           dx = 1;
       }

       
    //   LCD_setpos(0);
    //   LCD_putstringn(lcd_text + x, 16);
       printf(lcd_text);

       if(x==0 || x==(len-16)) NutSleep(2000); //przy koncu i poczatku tekstu czekamy troche dluzej

       x+=dx;

    // przesuwanie tekstu
       if(x==(len-16) || x==0)
           dx = -dx;
       
       NutSleep(2300);      // czekamy okolo 2300 milisekund
        }
    }



    void initialize()
    {
        u_long RSspeed;

    // inicjalizacja UART'a czyli RS232C
       NutRegisterDevice(&DEV_DEBUG, 0, 0);
       freopen(DEV_DEBUG_NAME, "w", stdout);
       RSspeed = UART_BAUDRATE;
       _ioctl(_fileno(stdout), UART_SETSPEED, &RSspeed);
        printf("Hello MMnet01 \n");
       printf("\n\nNut/OS %s Server...", NutVersionString(),"\n");
       printf("Wait for IP ready\n");

    // inicjalizacja urz±dzenia systemu plików UROM
        NutRegisterDevice (&devUrom, 0, 0);

    // inicjalizacja sieci Ethernet
       if (NutRegisterDevice(&DEV_ETHER, 0, 0)) { printf("Rejestracja Ethernetu zawiodla");}
       
       unsigned char mac[] = MAC_ADDR;
    #ifdef USE_DHCP
        if(NutDhcpIfConfig(DEV_ETHER_NAME, mac, 20000))
    #endif
        {
       NutNetIfConfig(DEV_ETHER_NAME, mac, inet_addr(MY_IP_ADDR),inet_addr(MY_NETMASK));
    //   NutIpRouteAdd(0, 0, inet_addr(MY_GATEWAY), &DEV_ETHER);
        }
       printf(" Server is now ready\n");
       printf("%s ready\n", inet_ntoa(confnet.cdn_ip_addr));
    }



    int CGI_callback(FILE *f, REQUEST *r)
    {
    // kod HTML przekierowujacy do pliku index.asp
        static prog_char webpage_code[] = "<html><head><meta http-equiv=\"refresh\" content=\"0;url=../index.html\"></head><body></body></html>";

    // wysylamy naglowek protokolu HTTP 200 OK - wszystko w porzadku
        NutHttpSendHeaderTop(f, r, 200, "Ok");   

    // wysylamy "Content-Type" - rodzaj danych, czyli plik tekstowy w formacie HTML (text/html)
        NutHttpSendHeaderBot(f, "text/html", -1);

    // wysylamy kod strony w HTMLu
        fputs_P(webpage_code, f);

    // upewniamy sie, ze wszystko zostalo juz wyslane do klienta
        fflush(f);

    // sprawdzamy, czy skrypt zostal wywolany z parametrami
        if (r->req_query) {
            char *name;
            char *value;
            int i;
            int count;

    // pobieramy liczbe parametrow
            count = NutHttpGetParameterCount(r);

            for (i = 0; i < count; i++) {

    // pobieramy nazwe i wartosc kolejnego parametru
                name = NutHttpGetParameterName(r, i);
                value = NutHttpGetParameterValue(r, i);

    // analizujemy go i podejmujemy odpowiednie czynnosci
                if(!strcmp(name,"text"))
           {
    // parametr lcd - nowy tekst do wyswietlenia na LCD-ku, kopiujemy go do zmiennej lcd_text   
          strcpy(lcd_text, value);
           }

            }
        }

        return 0;
    }


    // watek serwera HTTP - obsluga sterowania aplikacja przez pzregladarke WWW
    THREAD(http_server, args)
    {
        TCPSOCKET *s;   
        FILE *f;

        printf("Poczatek watku http_server!\n\r");

        for (;;)
        {
    // tworzymy gniazdo TCP
       s = NutTcpCreateSocket();


    // blad - czekamy 3 sekundy i probujemy ponownie   
            if(!s)
            {
                printf("Bł±d przy tworzeniu gniazda sieiowego\n");
                NutSleep(3000);
                continue;
            }

    // oczekujemy na polaczenie na port 80 (HTTP)
            NutTcpAccept(s, 80);

    // tworzymy plik polaczony z gniazdem s
       f = _fdopen((int) s, "r+b");

    // przetwarzamy zapytanie HTTP
       if(f)
       {
           NutHttpProcessRequest(f);
    // zamykamy plik
           fclose(f);
       }
       

    // zamykamy gniazdo   
       NutTcpCloseSocket(s);
        }
    }

    int main(void)
    {
          initialize();
       
       NutRegisterDevice(&devLcd, 0, 0) ;
        fprintf(fopen("lcd","w"), string);
       printf(string);

        strcpy(lcd_text, "Ustaw ten tekst przez przegladarke!");

        NutRegisterCgi("lcd.cgi", CGI_callback);

    // tworzymy watek serwera WWW
        NutThreadCreate("httpd", http_server, NULL, NUT_THREAD_MAINSTACK);

    // tworzymy watek obslugujacy wyswietlacz LCD
        NutThreadCreate("lcd", lcd_scrolling, NULL, NUT_THREAD_MAINSTACK);

    // ustawiamy najnizszy priorytet watku main
        NutThreadSetPriority(254);
       
       NutRegisterAsp();
        NutRegisterAspCallback(ASPCallback);

    //*********************************************************************************

       
    //*********************************************************************************
    // watek main idzie spac...
        for(;;) NutSleep(10000);

        return 0;
    }




    Poprawiłem znaczniki.
    Zanczniki należy umieszczać w nawiasach kwadratowych.
    [zumek]
  • e-mierniki
  • #6
    jdn
    Level 12  
    ja dałem long i short 1 i 26

    Dodano po 2 [minuty]:

    wiem tylko że ESC_CLR czyści wyświetlacz, nie wiem jak wpisać tylko jeden znak w jedno miejsce, gdybyś odkrył to napisz, mozna jeszcze używać \n do nowej lini

    Dodano po 5 [minuty]:

    jesli chodzi o Thomsona to jest modem do neostrady tpsy,netii czy innych tak?
    to nie bedziesz miał takiej prostej bajki tam na wyjściu chyba nie ma RJ45, niestety by Ci to działało tak jak mi się wydaje chciałbyś potrzebujesz router z modemem adsl, dość tani i dobry jest pentagram. Wtedy podłączasz internet do tego router i do jednego gniazda PCta a do kolejnego MMnet. Jeśli ustawisz forwardowanie w routerze domyslnie na port 80 to będziesz miał dostęp do płytki z Internetu. Jednak neostrada ma zmienny zewnętrzny IP i co 24h go zmienia więc dostęp będzie zlekka utrudniony.
  • #7
    debbuger
    Level 10  
    Jeśli chodzi o wyświetlacz to napisałem własną obsługę na szczęście porty działają normalnie i mogę wszystko.

    Jeśli chodzi o modem to ma on RJ45 i USB i nie jest to neostrada ale alternatwny operator i wszystkie znaki na niebie i ziemie wskazują że to powinno działać ale nie działa [:cry:]
  • #8
    jdn
    Level 12  
    ja osobiście podłączałem Ethernuta do kart sieciowych Realteka, zintegrowanej w lapciaku Intela, routera Linksysa ale z wgranym Tomato. Wszędzie działał przykład httpd. Gdy sam próbowałem na początku po kolei robić połączenie tak jak się powinno nie działało. Obecnie działam na Ethernu t4.5.4 wiem że to jest beta ale od jakiegoś pół roku uczestniczę w grupie dyskusyjnej i wiem co zmieniąją w kodzie. Większość na lepsze. Poprawili w wersji beta dhcp, które poprzednio po 65sekundach od włączenia jeśli nie dostało odpowiedzi od serwera to zdychało i zawieszało Ethernuta. Teraz zwiększyli tą wartość z 16btiwoej na 32bitową co znacząco poprawia dhcp. Ważne jest też byś miał włączony zewnętrzny kwarc w atmedze. Ja na początku nie miałem i połączenie z siecią nawiązywało się ok30-40sekund, gdy przełączyłem na 16MHz trwa to poniżej sekundy i zawsze się udaje. Sprawdź fusebity, albo włącz prostą stronę po podłączeniu do kompa jeśli ładuje się od zaraz po drugim odświeżeniu wszystko ok. Jeśli dość wolno pewnie kwarc jest nie tak.

    Dodano po 5 [minuty]:

    za półtora tygodnia bronię mgr z systemu do kontroli przez ethernet urządzeniami o mocy do 2000Wat opartym na Ethernucie. Działa mi wszystko co chciałem, po obronie może opublikuję to gdzieś w sieci. Jak tak zrobię to dam znać.
  • #9
    zimek99
    Level 11  
    Witam!!!

    Posiadam mmnet03 i mam duży problem z uruchomieniem tego zestawu.
    Raz udało mi się załadować plik serwer03.hex (gotowca z propoxu) i ruszyło.
    Teraz po skasowaniu programu mmnet milczy.
    Gdy go zaprogramuje świeci mi się dioda zasilania i act.
    Nie wiem co dalej. Fuses i lockbity mam dobrze poustawiane.
    Używam programatora usb stk500 i avrstudio4.
    Nawet jak ładuje innego hexa serwer httpd ethernuta też milczy mmnet. Kompletnie brak komunikacji po rs(hiperterminal) i nie zgłasza się w sieci

    Może jakaś porada??
  • #10
    debbuger
    Level 10  
    Witam
    skoro plik server03.hex ci dziala to uklad raczej jest sprawny. Jeśli chodzi o RS232 to mi też nie dzialal bo sama kabel robilem pokombinuj z liniami TX i RX jeśli chodzi o Hyper Termina to mi do dzisiaj to na tym badziewnym programie nie dziala. Używam innego Terminal i chodzi bez problemów. Jak jesteś twardym zawadnikiem to napisze sobie obieranie C++ Builder powinno chodzić.
    Jeśli chodzi o przyklad httpd to jak skompilowaleś Ethernuta ważny jest plik MMnet03.conf bez niego na pewno nie ruszy. Poza tym napisz coś prostego w Ansi C naprzyklad zapalanie diody zaladuj i zobacz jak zachowuje sie procek czy wszystkie porty chodzą i na pewno jest wylączony JTAG. Sprawdź też kwarc czy jest zewnętrzy ale pewnie jest bo u mnie też byl. Ja programuje STK200 i chodzi trochę opornie.

    http://www.port80h.com.pl/mobile/articles.php?lng=pl&pg=276
  • #11
    zimek99
    Level 11  
    tylko raz ruszył mi serwer po wrzuceniu pliku serwer03.hex (gotowca propoxu) także zastanawiam się co może być nie tak.
    teraz gdy wrzucam tego gotowca to nie ruszy. Układ jakby się zawiesił. Program wgrywam normalnie do procka, wszystko cacy, ale nie gada po rs ani po sieci tcp/ip.
  • #12
    debbuger
    Level 10  
    No to w takim razie albo masz coś nie tak z programatorem albo układzik padł w co wątpie (jak tak to reklamuj) albo za dużo kombinowałeś z fuse bitami i zablokowałeś procek jak tak to masz poważny problem musisz skombinować programator równoległy (nie STK200) albo przelutować procek oba rozwiązania są niezmiernie kłopotliwe. Jakby co to kontaktuj się support'em propoxu może oni ci coś doradzą sensowniejszego.
  • #13
    zimek99
    Level 11  
    Jeszcze mam prośbę. Możesz odczytać u siebie ustawienie fusebitów i locków i mi podać bo na 100% nie wiem jak mają być ustawione w tym układzie. Procka nie zablokowałem bo po załadowaqniu programiku na diodę posprawdzałem sobie porty wyjściowe.
    Do propoxu już wysłałem zapytanie co i jak i czekam teraz. Jak mi nic konkretnego nie odpowiedzą to im to odeślę bo już mnie nerwy zżerają.
    Pozdrawiam i dziękuje za pomoc.
  • #14
    debbuger
    Level 10  
    Proponuje jeszcze przekompilować przyklad httpd on napewno dziala i użyć funkcji discover do wykrycia IP bo propox ma blędy w dokumentacji sprawdzić czy świeci się dioda LNK i powinna migać dioda ACT a nie świecić ciągle i to powinno chodzić jeśli nie to już nie mam pojęcia.

    MMnet01 i NutOs problemy
  • #15
    jdn
    Level 12  
    prawie nie masz szans zablokować procka, w 90% to wina programatora i połączenia z nim. w STK200 zobacz czy masz w środku sam bufor 74 czy są jakieś kondensatory, polecam programatory na usb ale bez fdi(jest jeden otwarty projekt z kórym zaimplementowano usb na atmega i można na uniwerslanej zrobić), ważne byś sprawdził czy prawidłowo kabelki podłączone są, spawdź w datasheet atmega128 gdzie masz bity do programowanie - NIE myl z SPI bo są tu inne piny
  • #16
    debbuger
    Level 10  
    Witam ponownie mam nowy problem z bliżej mi nie znanych przyczyn mój modul zaczol się resetować i tym samym przestal dzialać nie wiem co może być przyczyną tego dodam tylko że Watchdog'a nawet nie ruszalem

    Mam też pytanie dlaczego nie dziala przykalda rs232d i tym samym jak zrobić odbieranie z UARTA bo ten programik nie dziala wogóle

    Code:

    #include <dev/board.h>
    #include <stdio.h>
    #include <io.h>
    #include "RM_LCD.c"

    #define UART_SPEED 115200

    main()
    {
        LCD_init();
       write_string("Hello LCD is ready");
       
       FILE *rsfile;
       u_long baudrate = UART_SPEED;
       char Buffer[128];
    //
        NutRegisterDevice (&DEV_DEBUG, 0, 0);
        rsfile = fopen(DEV_UART_NAME,"r+w");
        
        _ioctl(_fileno(rsfile), UART_SETSPEED, &baudrate);

        strcpy(Buffer,"Hello World UART Transmit");
       
       fwrite(Buffer,1,26,rsfile);
       fread(Buffer,1,32,rsfile);   

        writesecoundline(Buffer);
       for(;;);
    }
  • #17
    jdn
    Level 12  
    niestety nie miałem możliwości testowania uarta u siebie, nie przewidziałem nawet go w projekcie, stwierdziłem że jeśli jest strona www to na nią mogę wrzucić znacząco więcej rzeczy.
    miałem to wrzucić dawno temu ale zapomniałem.
    w załączniku przykład mojego programu plus schemat jak to zaprojektować. Jest kilka błędów(przy indukcji kondensatory trzeba dobrać ciut inaczej to obliczone przesymulowane mają się nijak do rzeczywistości) projekt zrobimy z pół roku temu więc nie proszę nie pytać o więcej. Układ miał za zadanie włączać i wyłączać urządzenia. Przez przekaźniki albo triaki.Sterowanie grupowe jak i fazowe. Przez przekaźniki dodatkowo miał mierzyć prąd jaki płynie przez kabel. Prąd ten miał być rzędu 10A więc najprościej było wykorzystać zjawisko indukcji.
    W załączniku dołączam kody i i plik hex gotowy do wgrania od ręki do mmnet01.
    Schemat może się przydać do wykrywania zera i innych rzeczy. Dużo w nim wiedzy którą skumulowałem na jednym schemacie.
  • #18
    puch_
    Level 11  
    debbuger wrote:
    Witam ponownie mam nowy problem z bliżej mi nie znanych przyczyn mój modul zaczol się resetować i tym samym przestal dzialać nie wiem co może być przyczyną tego dodam tylko że Watchdog'a nawet nie ruszalem

    Mam też pytanie dlaczego nie dziala przykalda rs232d i tym samym jak zrobić odbieranie z UARTA bo ten programik nie dziala wogóle

    Code:

    #include <dev/board.h>
    #include <stdio.h>
    #include <io.h>
    #include "RM_LCD.c"

    #define UART_SPEED 115200

    main()
    {
        LCD_init();
       write_string("Hello LCD is ready");
       
       FILE *rsfile;
       u_long baudrate = UART_SPEED;
       char Buffer[128];
    //
        NutRegisterDevice (&DEV_DEBUG, 0, 0);
        rsfile = fopen(DEV_UART_NAME,"r+w");
        
        _ioctl(_fileno(rsfile), UART_SETSPEED, &baudrate);

        strcpy(Buffer,"Hello World UART Transmit");
       
       fwrite(Buffer,1,26,rsfile);
       fread(Buffer,1,32,rsfile);   

        writesecoundline(Buffer);
       for(;;);
    }


    Pytanie dotyczące tego przykładu aktualne?

    Bo wątek już chwilkę żyje.

    Pzodrawiam

    puch
  • #19
    kedzi1
    Level 18  
    Ja mam MMnet01 i boarda do tego. Ja pisze stos sam i nie miałem większych problemów z uruchomieniem sprzętu. Na początku złapałem się tylko na uruchomieniu RS'a. Mianowicie na płytce Propoxa programator jest dołączany przez bufor. Tzn. w zależności od stanu specjalnego pinu do ATMEGI dołączony jest programator lub sprzęt z płytki. Propox ma programatory które przełączają to automatycznie, ja mam programator na ATMEGA8 z interfejsem USB przez jakiś sprytny kabelek i on nie ma tego sterowania. Na płytce jest zworka z ledem koło złącza programatora którym można na sztywno ustawić bufor na programator, jednak w tym stanie odłączony jest pierwszy port szeregowy.

    Dobijając do brzegu :). Mi nie działał port szeregowy nawet na przykładzie Propoxa, jak odłączyłem zworką programator port zadziałał, ale co sie naszukałem i nerwów straciłem...
  • #20
    puch_
    Level 11  
    Ja pracuję na Mnet 102 i płyta pod to. Ostatnio miałem podobny problem (uległ uszkodzeniu bufor o którym wspomniałeś (dokładnie to jest multiplekser)) i miałem transmisję tylko w jedną stronę. Używam Jtaga więc nie miałem nigdy problemu z funkcjonalnością portu E. Buduję na tym sprzęcie bramkę GPRS <-> Ethernet.
    Gdybyś miał jakieś problemy a będę w stanie to chętnie pomogę.

    pozdrawiam

    puch
  • #21
    debbuger
    Level 10  
    Jeśli chodzi o problem restartowania się układu MMnet01 to nie wynikał on z programy tylko z zasilania. Jeśli mamy płytkę rozruchową propoxu to jest już tam stabilizator napięcia na 5V i jeśli zasilamy go za niskim napięciem to prąd dostarczony do modułu jest za mały i AtMega128 się restaruje.
    Jeśli chodzi multiplexer do postu SPI to jest tam zwroka i nie ma żadnego problemu.

    Tu mam nowe pytanko czy jest ktoś tak twardym zawodnikiem że dałby rade złożyć MMnet01 w programie Proteus (ISIS). Bo ten programik jest naprawdę wypasiony mógłby symulować ten moduł na karcie sieciowej kompa poza tym można by wprowadzić plik hex do procka co ułatwiło by testy bo by nie trzeba za każdym razem programować Flash'a


    Pozdrawiam wszystkich zainteresowanych
  • #22
    Wilku
    Level 17  
    Czy ktoś może wyjaśnić mi dlaczego serwer www z przykładów z EP nie działa w internecie? Lokalnie nie ma problemu, ale w necie już nie widać. Ustawienia routera zdaje się są OK, bo serwer postawiony testowo na Apache działał.
  • #23
    debbuger
    Level 10  
    Nie wiem mi śmiga bez problemów sprawdź czy masz przydzielanie DHCP i sprawdź programem discoverer czy masz przydzielony zewnętrzny adres IP
  • #24
    Wilku
    Level 17  
    Zewnętrzne IP mam, ponieważ działa mi serwer na Apache. Mógłbyś podesłać mi hexa lub źródło programu działającego u Ciebie?
  • #25
    debbuger
    Level 10  
    To działa zawsze i wszędzie
    To przykłas z examplów nutapp httpd
    stronka śmiga bez problemów (tylko zmień rozszerzenie na hex)

    akurat już sie nie rozwijam w tym temacie ale mam zamiar wrócić do niego wkróce.
  • #26
    Wilku
    Level 17  
    Jakie IP ma ten serwer? Przeszukałem 192.168.0.x i nic. Zapewne ma cos z zakresu 10.x.x.x. Te przykłady o których wspomniałeś są na stronie ethernuta?
  • #27
    debbuger
    Level 10  
    sprawdź se Discoverer'em


    Ale zamieszczam tu pełny kurs jak uruchomić serwer na MMnet01 w formie screenshotów nie trzeba nic czytać tylko patrzeć i wszystko staje się jasne.
    Attachments:
  • #28
    Wilku
    Level 17  
    Niby działa, w sieci lokalnej widać stronkę, ale w necie już nie widać. Router (D-link 524) nie ma na liście DHCP MMNET-a. Wie ktoś może jak go skonfigurować ? Bo może robię coś nie tak.....
  • #29
    adams03
    Level 12  
    Witam serdecznie.
    Posiadam mmnut104. Serwer testowy działa. Jednak w czasie kompilacji przykładowego serwera pojawia się komunikat:
    Code:

    Build started 28.1.2009 at 21:53:35
    /nd.c
    avr-gcc.exe -I"C:\WinAVR-20081205\avr\include\avr" -I"C:\ethernut-4.6.4\nut\include" -I"C:\ethernut-4.6.4\nutbld" -I"C:\ethernut-4.6.4" -I"C:\ethernut-4.6.4\nut\os"  -mmcu=atmega128 -Wall -gdwarf-2  -O0 -fsigned-char -MD -MP -MT nd.o -MF dep/nd.o.d  -c  ..
    /nd.c

    ../nd.c: In function 'NutAppMain':
    ../nd.c:712: warning: implicit declaration of function '_ioctl'
    ../nd.c:726: error: 'devEth0' undeclared (first use in this function)
    ../nd.c:726: error: (Each undeclared identifier is reported only once
    ../nd.c:726: error: for each function it appears in.)
    make: *** [nd.o] Error 1
    Build failed with 3 errors and 1 warnings...


    Może się już ktoś z tym problemem spotkał i zna rozwiązanie, kompiluje oryginalny plik z ethernut-4.6.4 httpserv.c
  • #30
    debbuger
    Level 10  
    W sumie ethernut to wielkie badziewie i powiem tylko że sypie się to bez przerwy. Zauważyłem że jedyna konfiguracja która działa poprawie to Windows XP service pack2, WinAVR-20070525 i ethernut-4.4.1 a każada inna wersja systemu i programów powoduje to że nie da się tego skompilować. Niestety nie wiem o co w tym chodzi :(. Widze że nie korzystasz z tym wersji i to zapewnne jest przyczyną