Strona 1 z 1

RJ45 LAN AVR

: 17 maja 2024, 16:36
autor: tomaszdko
Ostatnio bawiłem się robienie prostej sieci lan między komputerami i przypomniałem sobie o module W5100 , który kiedyś kupiłem .
Wgrałem testowy program w bascom na atmega328p :
  1. $REGFILE = "M328PDEF.DAT"
  2. $CRYSTAL = 20000000
  3. $BAUD = 115200
  4. $HWSTACK = 100
  5. $SWSTACK = 100
  6. $FRAMESIZE = 100
  7. ENABLE INTERRUPTS
  8. '*******************************************************************************************************************************************************
  9. '*** UART-COM1 *****************************************************************************************************************************************
  10. '*******************************************************************************************************************************************************
  11. CONFIG COM1 = 115200  , SYNCHRONE = 0 , PARITY = NONE , STOPBITS = 1 , DATABITS = 8 , CLOCKPOL = 0
  12. OPEN "COM1:" FOR BINARY AS #1
  13. CONFIG SERIALIN0 = BUFFERED , SIZE = 10 , BYTEMATCH = 13
  14. DIM RS232_1 AS STRING*11
  15. DIM COM1 AS  LONG
  16. ENABLE URXC
  17. '*******************************************************************************************************************************************************
  18. '*** SPI ***********************************************************************************************************************************************
  19. '*******************************************************************************************************************************************************
  20. Config Spi = Hard , Interrupt = Off , Data_order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0
  21. 'Init the spi pins
  22. Spiinit
  23. '*******************************************************************************************************************************************************
  24. '*** ZMIENNE *******************************************************************************************************************************************
  25. '*******************************************************************************************************************************************************
  26. CONFIG PORTD.2 = OUTPUT
  27. PORTD.2=0
  28. WAIT 1
  29. PORTD.2=1
  30. '*******************************************************************************************************************************************************
  31. '*** PORT / PIN ****************************************************************************************************************************************
  32. '*******************************************************************************************************************************************************
  33.  
  34. '*******************************************************************************************************************************************************
  35. '*** PROGRAM *******************************************************************************************************************************************
  36. '*******************************************************************************************************************************************************
  37. Const Epr = 0
  38. Config Tcpip = NOINT , Mac = 12.128.12.34.56.78 , Ip = 192.168.1.10 , Submask = 255.255.255.0 , Gateway = 192.168.1.2 , Localport = 1000 , Tx = $55 , Rx = $55 , Chip = W5100 , Spi = 1
  39. Print #1 ,"Init Done"
  40.  
  41. 'The next code is optional. It shows how to change the IP at run time
  42. #if Epr = 1
  43.     Dim Xx As Eram Long                                     ' this is 4 bytes of EEPROM
  44.     Dim Zz As Long                                          ' this is a long
  45.     Zz = Xx                                                 ' read eeprom
  46.     Dim B4 As Byte
  47.     B4 = 8
  48.  
  49.     'use maketcp to create an IP number
  50.     'notice that last param is a variable.
  51.     'all bytes could be variables of course
  52.     Zz = Maketcp(192 , 168 , 0 , B4)
  53.  
  54.     'in reverse order
  55.     Zz = Maketcp(b4 , 9 , 168 , 192 , 1)
  56.  
  57.     'simplest form
  58.     Zz = Maketcp(192.168.0.8)
  59.  
  60.     Print Ip2str(zz)
  61.     Settcp 12.128.12.34.56.78 , Zz , 255.255.255.0 , 0.0.0.0
  62.     '                            ^   notice the variable that holds the IP address 192.168.0.8
  63.     '                                from the EEPROM data line below
  64. #endif
  65.  
  66. DO
  67.  
  68.  
  69. LOOP
  70. END
  71. '-------------------------------------------------------------------------------------------------------------------------------------------------------
  72. SERIAL0CHARMATCH:
  73. PUSHALL
  74. INPUT #1 , RS232_1 NOECHO
  75. COM1 = VAL(RS232_1)
  76. POPALL
  77. RETURN
  78.  
  79. $eeprom
  80. ' take care, data is stored byte, by byte so reversed notation is used
  81. Data 8 , 0 , 168 , 192                                      '   this is 192 , 168 , 0 , 8
  82. $data
Ten program właściwie nic nie robi ale można sprawdzić za pomocą "ping" czy jest połączenie w sieci lan . No i było .
Stety i niestety ale nie znam się na robieniu stron , serverów itp by można było sterować atmegą lub pobierać dane z czujnika i wyświetlać na stronie w net. Mam jednak pytanie czy jest możliwe użyć tych modułów do transmisji danych między dwiema atmegami ? coś w stylu rs232 tyle że po kablu sieciowym na duże odległości .
Są przykłądy w Bascom ale nie wiem za któy się zabrać .

Re: RJ45 LAN AVR

: 21 maja 2024, 1:58
autor: niveasoft
Robiłem już takie moduły tylko że zawsze przez jakiś router. Nie interesowałem się czy da się bezposrednio połączyć. Kiedyś do takich rzeczy używało się kabla skrosowanego. Od jakiegoś czasu moduły same potrafią sie krosować.

Mam taki kod z 2019r :D na Arduino Uno z Megą328P i Shieldem W5100 który reaguje na komendy AT przez USB. Używa też pamięci Eeprom. Można zaprogramować sobie najpierw jednym kodem na przykład trzy takie moduły a potem każdy przez USB skonfigurować. Na przykład "AT+IP=192.168.1.2" i "AT+GATE=192.168.1.1"
Potem możesz sobie dowolnie przesyłać miedzy nimi dane. To było używane do sdalnego sterowania jakąś bramą i innymi wejściami.
Naciśniecie w jednym przycisku zmienia stan portu na odległym module. Nawet mi zostały gdzies klawiaturki z LED`ami.
Mogę ten kod w razie czego zamieścić.