Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

NM7010A Wiznet [bascom][ATmega32] - SERWER HTTP

bartas87poz 31 Gru 2010 00:08 3420 9
  • #1 31 Gru 2010 00:08
    bartas87poz
    Poziom 9  

    Witam,

    zakupiłem moduł Wiznet NM7010A-LF rev 1.1
    stworzyłem układ według schematu z EP-01.09 (schemat w załączniku)

    sprawdziłem wszystkie połączenia, nie było żadnych zwarć a wszystkie układy są nowe.

    I pojawia się problem z uruchomieniem.
    wgrałem na uC program:

    Code:
    $regfile "m32def.dat"
    
    $lib "i2c_twi.lbx"
    $lib "tcpip.lbx"
    $crystal = 11059200
    $baud = 19200                                               ' szybkość pracy UART

    Const Sock_stream = $01                                     ' Tcp
    Const Sock_dgram = $02                                      ' Udp
    Const Sock_ipl_raw = $03                                    ' Ip Layer Raw Sock
    Const Sock_macl_raw = $04                                   ' Mac Layer Raw Sock
    Const Sel_control = 0                                       ' Confirm Socket Status
    Const Sel_send = 1                                          ' Confirm Tx Free Buffer Size
    Const Sel_recv = 2                                          ' Confirm Rx Data Size

    'socket status
    Const Sock_closed = $00                                     ' Status Of Connection Closed
    Const Sock_arp = $01                                        ' Status Of Arp
    Const Sock_listen = $02                                     ' Status Of Waiting For Tcp Connection Setup
    Const Sock_synsent = $03                                    ' Status Of Setting Up Tcp Connection
    Const Sock_synsent_ack = $04                                ' Status Of Setting Up Tcp Connection
    Const Sock_synrecv = $05                                    ' Status Of Setting Up Tcp Connection




    Const Sock_established = $06                                ' Status Of Tcp Connection Established
    Const Sock_close_wait = $07                                 ' Status Of Closing Tcp Connection
    Const Sock_last_ack = $08                                   ' Status Of Closing Tcp Connection
    Const Sock_fin_wait1 = $09                                  ' Status Of Closing Tcp Connection
    Const Sock_fin_wait2 = $0a                                  ' Status Of Closing Tcp Connection
    Const Sock_closing = $0b                                    ' Status Of Closing Tcp Connection
    Const Sock_time_wait = $0c                                  ' Status Of Closing Tcp Connection
    Const Sock_reset = $0d                                      ' Status Of Closing Tcp Connection
    Const Sock_init = $0e                                       ' Status Of Socket Initialization
    Const Sock_udp = $0f                                        ' Status Of Udp
    Const Sock_raw = $10                                        ' Status of IP RAW

    Config Pina.6 = Output


    Enable Interrupts                        ' włącz przerwania !
    'określamy nr MAC, adres IP, maskę podsieci oraz domyślną bramę
    'numer portu będzie użyty jeśli nie podano numeru portu przy tworzeniu połączenia
    'TX oraz RX konfigurują 4 gniazda z buforami po 2 KB
    Config Tcpip = Int0 , Mac = 12.28.12.34.56.78 , Ip = 192.168.0.100 , Submask = 255.255.255.0 , Gateway = 192.168.0.1 , Localport = 5000 , Tx = $55 , Rx = $55 , Twi = &H80 , Clock = 400000


    połączyłem komputer z układem kablem sieciowym - krosowanym
    ustawiłem połączenie sieciowe w komputerze na:

    Adres IP. . . . . . . . . . . . . : 192.168.0.101
    Maska podsieci. . . . . . . . . . : 255.255.255.0
    Brama domyślna. . . . . . . . . . : 192.168.0.1

    i próbuje pingować urządzenie i nie mogę nawiązać połączenia...

    mam może gdzieś błąd w programie?
    jak mogę próbować rozwiązać ten problem?
    jak mogę sprawdzić czy uC komunikuje się w ogóle z NM7010A?

    sprawdzałem napięcia na pinach:
    INT0 - 3,3V
    SCL - 4,15V
    SDA - 4,15V

    0 9
  • #2 31 Gru 2010 00:12
    piterus99
    Poziom 43  

    Albo masz literówkę albo kopnąłeś się i PC ma takie samo IP jak Twój układ. Co dziwne, ping powinien iść wtedy.

    0
  • #3 31 Gru 2010 01:05
    bartas87poz
    Poziom 9  

    Jak najbardziej literówka ... nie wiem gdzie szukać błędu... jak sprawdzić komunikacje?

    0
  • #4 31 Gru 2010 01:07
    piterus99
    Poziom 43  

    Sprawdź czy go widzisz w tablicy arp
    Komenda arp -a
    W macu też błąd Mac = 12.128.12.34.56.78 - chyba że zapisany jest jakoś inaczej niż szesnastkowo.

    0
  • #5 31 Gru 2010 11:19
    bartas87poz
    Poziom 9  

    To rzeczywiście była literówka, poprawiłem ja ale nadal nie ma odpowiedzi. Program na uC na pewno się wgrywa. Diody od NM7010A palą się obie.

    *************************************************

    Mimo braku pomysłów z waszej strony nie poddałem się i udało mi się w końcu znaleźć błąd. Mianowicie źle jest narysowany ten schemat (jest on ogólnie dostępny w internecie). Chyba nikt tego nie lutował od podstaw, kit pewnie jest poprawiony i działa i nikt tego nie zauważył.

    Układ NM7010A zawiera 2 resety:
    RESET i /RESET (nieRESET)

    W schemacie jest użyty tranzystor aby działał jak inwerter ale ktoś na schemacie źle narysował jedno z podłączeń RESET'a

    zamieszczam poprawiony schemat:

    0
  • #6 14 Sty 2011 19:05
    bartas87poz
    Poziom 9  

    Teraz układ działa poprawnie, z ping'owałem go i ruszyło.

    Udało mi się uruchomić stronę internetową na tym układzie jednak pojawił się problem z odczytem temperatury.

    Code:

    ********* ZMIENNE *********
    Dim Nr_ukladu(8) As Byte                                    'tablica w której przechowamy nr seryjny układu
    Dim Zmienna As Byte                                         'zmienna pomocnicza wykorzystywana jako licznik
    Dim Temp As Single                                          'wartość temperatury po przekształceniach  wg noty katalogowej
    Dim T(2) As Byte
    Dim Temper As String * 10
    Blad = 0

    ********* KOD *********
       1wreset
       Nr_ukladu(1) = 1wsearchfirst()                           'przypisanie układu DS1820 do zmiennej
       If Err = 1 Then                                          'kontrola błędu - jeśli err=1 wtedy nie znaleziono czujnika
          Blad = 1
       End If

       1wreset                                                  'inicjacja magistrali 1WIRE
       1wwrite &H55                                             'Wybór układu
       For Zmienna = 1 To 8
          1wwrite Nr_ukladu(zmienna)                            'urządzenia o numerze nr_ukladu.
       Next Zmienna

       1wwrite &HBE                                             'żądanie odczytania temperatury
       T(1) = 1wread()                                          'odczytaj z magistrali 1WIRE 1 bajt do 1 elementu tablicy T
       T(2) = 1wread()                                          'odczytaj z magistrali 1WIRE 2 bajt do 2 elementu tablicy T
       1wreset                                                  'inicjacja magistrali 1WIRE

       If T(2) = 0 Then                                         'Jeśli t(2)=0 to temperatura jest dodatnia
          Temp = T(1) / 2                                       ' oblicz temperaturę zgodnie z danymi noty katalogowej
       Else                                                     'Jeśli t(2)=0 to temperatura jest ujemna
          Zmienna = 256 - T(1)                                  ' oblicz temperaturę zgodnie z danymi noty katalogowej
       End If

       Temper = Fusing(temp , "#.&")                            ' przekształć do string'a


    Używam takiego kodu do odczytu i temperatury jednak już na samym starcie ustawia mi zmienna błąd na 1. Czyli jest Error - czyli nie widzi czujnika ?

    Myślałem że może coś być z czujnikiem, za pierwszym razem przez przypadek przylutowałem odwrotnie i zrobiło się zwarcie w układzie i bezpiecznik mi się przepalił.

    Poszedłem po nowy i nadal to samo, zwraca błąd ... (następnego nie chce kupować, nie są taki tanie)

    Może mam gdzieś błąd w kodzie - używam czujnika DS1820

    0
  • #7 29 Sty 2011 15:13
    yaiba
    Poziom 21  

    Czy masz może w twoim kodzie:
    Config 1wire = Portb.0 (konfiguracja linii magistrali)

    0
  • #8 29 Sty 2011 15:31
    bartas87poz
    Poziom 9  

    problem już rozwiązałem ... prawdopodobnie był uszkodzony uC bo na innym mi ruszyło przy tym samym programie

    (konfiguracje linii magistrali miałem i mam... )

    0
  • #9 31 Paź 2011 14:39
    daniiels
    Poziom 13  

    witam,
    a mi ten program nie działa. pinguje układ ale nie wyswietla mi strony
    oto kod:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    co jest nie tak??

    0
  • #10 01 Lis 2011 14:19
    bartas87poz
    Poziom 9  

    Najłatwiej tak, wrzucić gotowy program i napisać "co jest nie tak??"
    Jeżeli masz układ Wiznet NM7010A-LF rev 1.1 płytkę polutowaną to skup się na uruchomieniu najpierw samej strony. Po co tam te pomiary temperatury i tak rozbudowana strona. Łatwo o błąd przy kopiowaniu takiej ilości kodu.

    Wywal wszystko i zamieść sam kod do obsługi wyświetlenia jednego napisu na stronie.

    Po drugie mi się nie udało obsłużyć metody POST tym układem. Na pewno można ale niestety po kilkudziesięciu godzinach walki z tym zrezygnowałem z niej i oparłem wszystko na metodzie GET, poczytaj o nich jak działają i czym się różnią.

    0