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

Atmega1284/ Bascom - ENC28J60 - inicjowanie układu

maximus22_kr 23 Sty 2014 01:14 2064 11
  • #1 13209207
    maximus22_kr
    Poziom 18  
    Witam

    Chciałem skorzystać z kodu, który udostępnił Kolega Mundi
    Link

    ale cały czas mam aktywną linię układu ENC ( świeci się tam LED )
    Udostępniony kod był pod Atmega2561, ja chciałem uruchomić na Atmega1284P.

    Część elektroniczna - czyli PHY działa OK, po włożeniu wtyczki jedna dioda świeci, druga miga.

    Chodzi mi o te linijki:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Kolega Mundi ma tam
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Mnie wychodzi, że dla Atmega1284P powinno być
    Kod: text
    Zaloguj się, aby zobaczyć kod


    to wychodzi błąd
    Error 46: Assignment error [0:112 1:112 ]
    gdy tego nie ma to się kompiluje bez błędów, ale nie rusza.
  • #2 13209502
    Wojtek75
    Poziom 24  
    Zawsze na początku umieszczaj nazwę rejestru czyli prawidłowo:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #3 13212998
    maximus22_kr
    Poziom 18  
    Dziękuję Koledze, zadziałało. Tzn nie ma błędów kompilacji.

    Tylko nie działa jak trzeba, tzn. dioda LED podpięta do ENC CS cały czas świeci.
    Wrzuciłem w kilku miejscach Print, żeby sprawdzić, gdzie się wykłada.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    i robi to po wejściu w Reset
    Kod: text
    Zaloguj się, aby zobaczyć kod


    UART pokazuje:
    Inicjalizacja SPI
    ENC Reset
    ENC Active

    i dalej nic

    Wartość Enc28j60_soft_reset = &HFF jest stała ( Const )
  • #4 13237820
    maximus22_kr
    Poziom 18  
    Mam jeszcze jedno pytanie
    Dlaczego nie można użyć innego pinu jako końcówki sterującej SS dla układu ENC28J60 ?

    Od kilku dni grzebię sobie z przykładem z
    ]Link
    jak i z tym co udostępnił Kolega Mundi1970 i całość działa tylko przy ustawieniach
    Kod: text
    Zaloguj się, aby zobaczyć kod

    oraz pinie sterującym SS - PB.4
  • #5 13237931
    Wojtek75
    Poziom 24  
    Zapewne dlatego że wykorzystujesz sprzętowe SPI (Config Spi = Hard), a przy sprzętowym SPI sygnał SS (Slave Select input) masz właśnie na pinie PB4.
  • #6 13238106
    Mundi1970
    Poziom 24  
    maximus22_kr napisał:
    Mam jeszcze jedno pytanie
    Dlaczego nie można użyć innego pinu jako końcówki sterującej SS dla układu ENC28J60 ?


    Możesz użyć innego piny, zmodyfikuj tą linie:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Jeżeli do sterowania wybierzesz pin inny niż PB4, to PB4 (/SS) i tak musisz ustawić jako wyjście.

    Dla przypomnienia Link :)
  • #7 13238660
    maximus22_kr
    Poziom 18  
    No właśnie tak robię jak pisze Kolega Mundi1970 i konfiguruje SPI
    Kod: text
    Zaloguj się, aby zobaczyć kod


    i wtedy
    Kod: text
    Zaloguj się, aby zobaczyć kod


    i nic się nie dzieje, tzn. mam podpięty Tx i Gnd do komputera i gdy CS to PB.4 to mam
    Starting Tux
    ENCJ Version = 6

    a każda inna końcówka to cisza na UART, no i oczywiście ping'ów nie ma i nic się nie wczytuje na stronie. Rozumiem, że gdy wybieram inna końcówkę to Noss ma być 1 ?
    Nawet jeśli trzeba poczekać na odświeżenie strony to po UART powinno coś wysłać.

    Z kartą SD nie było takich problemów, mogę sterować, którą chcę końcówką.
  • #8 13240201
    Mundi1970
    Poziom 24  
    Sprawdź jeszcze czy konfiguracje pinu PB4 (/SS), wykonywana jest przed Config Spi i Spiinit.
  • #9 13240625
    maximus22_kr
    Poziom 18  
    Pin konfigurowany jest na początku, przed konfiguracją SPI.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    chyba winien kabel od programatora, zrobiłem nowy, stary ju z miał zużytą wtyczkę

    Niestety ta linia kodu
    Kod: text
    Zaloguj się, aby zobaczyć kod


    nie sprawdza się dla Mega1284p

    Co prawda wysyła zamiast tekstu jakieś śmieci, ale to nie jest najważniejsze.
    Potwierdzam, że kod Kolegi Mundi1970 działa lepiej i szybciej, niż ten z kursu.

    Mam pytanie, czy układ może wyświetlać więcej danych, ale otrzymywanych przez UART ? Mam drugą płytkę - mastera, która wysyła ciąg ( temperatury, wilgotność, ciśnienie, stan czujników DS ).
    Czy mierzył Kolega zużycie prądu przez cały układ ? u mnie wychodzi max 150 mA.

    Dodano po 2 [godziny] 37 [minuty]:

    I jeszcze tradycyjne pytanie - chciałem mieć więcej wyjść

    Zrobiłem tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    a w HTML tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    w efekcie mogę tylko włączać, a wyłączać już nie
  • #10 13241729
    Mundi1970
    Poziom 24  
    Cytat:
    Mam pytanie, czy układ może wyświetlać więcej danych, ale otrzymywanych przez UART ? Mam drugą płytkę - mastera, która wysyła ciąg ( temperatury, wilgotność, ciśnienie, stan czujników DS ).


    Jeżeli chcesz wysłać więcej ramek ethernetowych wykorzystując TCP, to może być problem :). Można próbować grzebać, w tym kawałku kodu gdzie stan połączenia TCP jest "Established". Po wysłaniu pierwszej ramki pasowało by uruchomić jakiś timer odliczający koniec czasu oczekiwania na potwierdzenie. Jeżeli przed końcem czasu dostałeś potwierdzenie wysyłasz następną ramkę. Jeżeli czas minął lub jest błąd w potwierdzeniu ponownie musisz wysłać pierwszą ramkę. Po wysłaniu wszystkich ramek przechodzisz w stan Close_wait. Opis protokółu TCP znajdziesz bez problemu, pomocny może być też program Wireshark do podglądu ramek ethernetowych. Z tego co widzę program nie sprawdza sum kontrolnych odebranych ramek, numery sekwencyjne nie są porównywane. Najlepiej całą obsługę TCP napisać od nowa ;).
  • #11 13241811
    maximus22_kr
    Poziom 18  
    Przy czterech wyjściach mam Used: 1203 bytes
    rozumiem, że jestem ograniczony rozmiarem Used, w sumie Atmega1284P ma 16K SRAM, ale pewnie będzie trzeba pokombinować tak jak piszesz

    Natomiast do Case Established wrzuciłem na końcu Print Tempstring2 i mam coś takiego:
    GET /LED1ON
    GET /LED1OF
  • #12 13242697
    Mundi1970
    Poziom 24  
    W ramce o długości. 1514 bajtów (oktetów) wykorzystując TCP możesz przesłać 1460 bajtów danych.
REKLAMA