Atmega32-vel Embedded web server+ videó interface

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Higgins
Tranzisztorgyógyász
Hozzászólások: 169
Csatlakozott: 2006. február 23. csütörtök, 7:00
Tartózkodási hely: Győr
Kapcsolat:

HozzászólásSzerző: Higgins » 2009. június 19. péntek, 13:29

Remélem ez segít?!
http://members.home.nl/bzijlstra/software/examples/WebTiger_RTL8019as.htm

Ben egy Webtiger board-ra is csinált Bascom tutorialt, amiben egy ATmega128-al vezérli a Realtek8019-et.

Némi eltérést az jelent, hogy külső SRAM-ot is illesztett hozzá (74HC573-al), de remélem azért érthető lesz a lépésenkénti élesztés/leírás.

Üdv: Higgins 8)

Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00
Kapcsolat:

HozzászólásSzerző: norbi » 2009. június 19. péntek, 14:00

Köszönöm a lnket, biztosan jó lesz, s ha lesz plussz időm át is nézem ezt a megoldást (tetszik a cimzés folymata) de most még erre gyúrok rá, mert nagy gond az én új címeimmel sem lehet, ARP kérés jön, csak utánna nem jön ujabb csomag, mert a

Kód: Egész kijelölése

T_enetpackettype = &H0608

nem változik, olyan mintha csak ARP kérés lenne.

A "T_enetpackettype" hol változik a futás folyamán? Mert nem találom :P

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9973
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2009. június 19. péntek, 16:32

A PC oldalon lesd meg, hogy az megy e ki...
Ott a cime is latszik, hogy hanyadik byte. A WireShark (leanykori nevel ethereal) erre valo. Igy latod a csomagokat a maga valojaban....

Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00
Kapcsolat:

HozzászólásSzerző: norbi » 2009. június 19. péntek, 16:45

Holnap megnézem azzal is, most ez teljesen ki is ment a fejemből :wink:

De még most sem tudom, hogy az az említett változó hol "változik"? :P

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9973
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2009. június 19. péntek, 16:54

A PC által kiküldött csomagban....

Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00
Kapcsolat:

HozzászólásSzerző: norbi » 2009. június 19. péntek, 20:33

Ezt tudom... :D
Csak ha rákeresek a forrásban az "T_enetpackettype" ra akkor csak a deklarálásnál van ill. a getpacket-ben ay IF T_enetpackettype=valami részben! Ezért kérdeztem, hogz hol van az értékátadás vagy mem.cím hívatkozás. mert így nem tudom, hogz hol lesz az értéke pl &H0006 vagy &H0608...

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9973
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2009. június 19. péntek, 21:03

A packet beesik a IP_packet változóba... Ez ugye DIM Ip_packet at &H40 címtől kerül letárolásra.
Az ETH_Type a packet &H52-es címén van, azaz a ip_packet &H12. címén!

A nevek/címek fiktívek, de a logika látszik belőle....

Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00
Kapcsolat:

HozzászólásSzerző: norbi » 2009. június 21. vasárnap, 18:07

Megnéztem a csomagokat, egyenlőre annyi a fejlemény, hogy valami hülyeséget küld vissza az AVR az ARP kérés válaszában, a protokoll tipsánál valami 0xCCCD hex érték van. Viszont a MAC cimét jól köldi el.

Higginsnek is köszönöm a linket, átírtam a mem.kezelést arra, amit ott szerepel, de a helyzet ugyanaz, ARP kérés, majd a válaszban csak a MAC van, már a protokoll tipusa sem jó.

Érdekes még az is, hogy az program ARP rutinjában a MYIP beírása sem jó, vagyis a MYIP változóban ott már nem az IP-m van, valahol futás közben kinullázódik, vagy elvesztődik, vagy nem tudom....Előtte kiíratom LCD-re a MYMAC-et, az stimmel, de az IP már nem, vagyis nem is kerül bele az RTLchip által elküldendő csomagba.

Amugy ahol lehet még hiba (vagyis ami másképp van, mint az eddigi moduljaimba):
-Address port felső 3bitjét másra is használom, de Robi javaslatára bitenkénti megfeleltetést használok, így látszólag jó
-Data port fordítva van beköte, igy byte tükrözéssel megy ill. jön az adat.

De ami arra utal, hogy ezekkel nincs baj , az az, hogy a SHOWREGS-et lefuttatva jók a visszakapott értékek!

u.i.Igazam, volt, jók a portbeállítások, a hiba az ARP rutinban volt, most tünt fel a PEEK, ami ha jól tudom a változó mem címére utal és az nem volt árírva 8)

-3nap az életemből :P

Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00
Kapcsolat:

HozzászólásSzerző: norbi » 2009. június 24. szerda, 23:20

Az előző probléma uygebár megfoldódott, de jött egy újabb 8)

Ha össze akarok állítani egy TCP csomagot (tegyük fel, hogy adott a cél IP és MAC is), hogy kezdjek hozzá?

Néztem a tutorialban a Send_tcp_packet-ot de elsőre elég kusza...html alapon megy a kommunikáció, vagyis a PC betőlt egy oldalt, amit frissít x secundumonként, de most az AVR kellene kezdeményezzen (kapcsolatot kellene léteíteni egy távoli adatbázissal). Csinált már valalki ilyet?

Köszönöm a segítségeket!

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9973
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2009. június 25. csütörtök, 5:01

C alapon van minta....

File Cserebere:
eth.zip néven. ENC28J60 esetén....
Működik:)


Alapelvek:
http://www.arduino.cc/cgi-bin/yabb2/YaB ... 44400223/5
http://code.rancidbacon.com/LearningAbo ... noEthernet
http://blog.thiseldo.co.uk/?p=329

Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00
Kapcsolat:

HozzászólásSzerző: norbi » 2009. június 25. csütörtök, 9:37

Köszi a linket, a C prog. alapján kezdem összeállítani a programrészletet, előszőr az ARP kérést.

Ezzel egyből van is egy kis baj, mert elsőre (Wireshark-al figyelve) valami nem ARP megy ki (mailformed packet).
Kis idő után helyreáll, s a protokoll ARP-ként jeleni meg, majd vált IP-re. Közben a program csak simán fut (max a beérkező csomagok zavarhatják, ami a routertől jön).
A cél IP-jét direkt az ARP-ben állítom, a cél MAC pedig szabványosan FF-ekből áll, de így is ez a helyzet. Egyenlőre az AVRWEB ARP-ját írtam át, lehet, hogy ott a baj!?

Itt van a prog.részlet:

Kód: Egész kijelölése

   'Start the NIC
   Call Write_rtl8019as(cr , &H22)
   Call Write_rtl8019as(tpsr , Txtstart)
   Call Write_rtl8019as(rsar0 , &H00)
   Call Write_rtl8019as(rsar1 , &H40)
   Call Write_rtl8019as(isr , &HFF)
   Call Write_rtl8019as(rbcr0 , &H3C)
   Call Write_rtl8019as(rbcr1 , &H00)
   Call Write_rtl8019as(cr , &H12)

'Cél MAC -jelenleg ismeretlen-
T_enetpacketsrc0 = 255
T_enetpacketsrc1 = 255
T_enetpacketsrc2 = 255
T_enetpacketsrc3 = 255
T_enetpacketsrc4 = 255
T_enetpacketsrc5 = 255

   Call Write_dest_mac

   For I = 1 To 6
       Call Write_rtl8019as(rdmaport , Mymac(i))
   Next I
  'Itt esetleg kellene valamilyen csomag?
   Packet(&H16) = &H02
   For I = 1 To 10
      Hulp1 = &H0C + I
      T = Packet(hulp1)
      Call Write_rtl8019as(rdmaport , T)
   Next I

   For I = 1 To 6
      Call Write_rtl8019as(rdmaport , Mymac(i))
   Next I

   For I = 1 To 4
      Call Write_rtl8019as(rdmaport , Myip(i))
   Next I

   Call Write_dest_mac

'Cél IP címe
T_arp_sipaddr0 = 192
T_arp_sipaddr1 = 168
T_arp_sipaddr2 = 0
T_arp_sipaddr3 = 30

   Call Write_rtl8019as(rdmaport , T_arp_sipaddr0)
   Call Write_rtl8019as(rdmaport , T_arp_sipaddr1)
   Call Write_rtl8019as(rdmaport , T_arp_sipaddr2)
   Call Write_rtl8019as(rdmaport , T_arp_sipaddr3)
 
   For I = 0 To &H11
      Call Write_rtl8019as(rdmaport , &H00)
   Next I
   
   Byte_read = 0
   Do
      Hulp1 = Byte_read And Rdc
      Call Read_rtl8019as(isr)
   Loop Until Hulp1 = 0
   Call Write_rtl8019as(tbcr0 , &H3C)
   Call Write_rtl8019as(tbcr1 , &H00)
 
   Call Write_rtl8019as(cr , &H24)


Tudom, hogy ez így egy válasz ARP, de ennek is menni kellene.

Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00
Kapcsolat:

HozzászólásSzerző: norbi » 2009. június 25. csütörtök, 13:42

Az ARP-n beül hol tudom változtatni a "feladat kódot"? Vagyis, hogy ARP kérés vagy válasz e az amit küldök?

Elvileg a hardver címhossz és a protokoll címhosz (HLEN,PLEN) után van ez a 16bites kód...

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9973
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2009. június 25. csütörtök, 14:42

Kérdés / válasz az az IP-addressből derül ki:

Destination/Source :)
Én vagy kérek, vagy válaszolok.... Ha kapok egy csomagot (én vagyok a destination), akkor a TCP csomajazonosító-t meglesem (ARP), ekkor erre választ adok: destination-source csere és csomagot így rakom össze....

http://avr.tavir.hu/modules.php?name=Co ... &pid=52#13
Itt az ICMP-t lesd meg. Ez az EchoPacket....

A Tannembaum könyvet meg kéne keresni, abban ki van vesézve....

Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00
Kapcsolat:

HozzászólásSzerző: norbi » 2009. június 25. csütörtök, 15:01

Most esett csak le, hogy tényleg hülyeséget írtam, mert egyszerű eldönrteni (elvben), hogy ARP kérés vagy válasz jön-e.

Ha kérés akkor arra úgyis mindenki figyel, mert cél MAC-címnek FF-ek vannak megadva (Broadcast), ha meg csak az egyik, hálózaton lévő gép válaszol az AVR-nek, akkor arra a többi úgysem figyel, mert nem neki(k) címezték!

( a forrás cím/cél cím lényegével tisztában voltam...csak ez az ARP kérés/válasz zavart meg, mert olvastam valamit egy operation code-ról, ami megmondja, hogy kérdés-e vagy válasz az ARP...)

Egy kis pihenés után jól gondolom?

Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00
Kapcsolat:

HozzászólásSzerző: norbi » 2009. június 25. csütörtök, 22:02

Mondtam én, hogy még kell állítani valamit....

Kód: Egész kijelölése

   
  'arp_op1 = packet(&h16)
   Packet(&H16) = &H01                                      'ARP kérés
   'Packet(&H16) = &H02                                      'ARP válasz


Ez lenne az az Operation code 8)

Ha esetleg valaki ARP kéréseket akar árasztani:

Kód: Egész kijelölése

 
   Call Write_rtl8019as(cr , &H22)
   Call Write_rtl8019as(tpsr , Txtstart)
   Call Write_rtl8019as(rsar0 , &H00)
   Call Write_rtl8019as(rsar1 , &H40)
   Call Write_rtl8019as(isr , &HFF)
   Call Write_rtl8019as(rbcr0 , &H3C)
   Call Write_rtl8019as(rbcr1 , &H00)
   Call Write_rtl8019as(cr , &H12)

   Call Write_rtl8019as(rdmaport , &HFF)                    'Broadcast
   Call Write_rtl8019as(rdmaport , &HFF)
   Call Write_rtl8019as(rdmaport , &HFF)
   Call Write_rtl8019as(rdmaport , &HFF)
   Call Write_rtl8019as(rdmaport , &HFF)
   Call Write_rtl8019as(rdmaport , &HFF)

   Call Write_rtl8019as(rdmaport , &H00)                    'Saját MAC cím beírása
   Call Write_rtl8019as(rdmaport , &H11)
   Call Write_rtl8019as(rdmaport , &H22)
   Call Write_rtl8019as(rdmaport , &H33)
   Call Write_rtl8019as(rdmaport , &H44)
   Call Write_rtl8019as(rdmaport , &H55)

   Call Write_rtl8019as(rdmaport , &H08)                    'Csomag tipusa (ARP=0806)                 '
   Call Write_rtl8019as(rdmaport , &H06)
   Call Write_rtl8019as(rdmaport , &H00)                    'HW tipus, Ethernet esetén 0001
   Call Write_rtl8019as(rdmaport , &H01)
   Call Write_rtl8019as(rdmaport , &H08)                    'Protokoll tipusa, IP esetén 0800
   Call Write_rtl8019as(rdmaport , &H00)
   Call Write_rtl8019as(rdmaport , &H06)                    'HLEN
   Call Write_rtl8019as(rdmaport , &H04)                    'PLEN
   Call Write_rtl8019as(rdmaport , &H00)
   Call Write_rtl8019as(rdmaport , &H01)                    'ARP kérés

   Call Write_rtl8019as(rdmaport , &H00)                    'Saját MAC cím beírása
   Call Write_rtl8019as(rdmaport , &H11)
   Call Write_rtl8019as(rdmaport , &H22)
   Call Write_rtl8019as(rdmaport , &H33)
   Call Write_rtl8019as(rdmaport , &H44)
   Call Write_rtl8019as(rdmaport , &H55)

   Call Write_rtl8019as(rdmaport , 192)                     'Forrás IP
   Call Write_rtl8019as(rdmaport , 168)
   Call Write_rtl8019as(rdmaport , 0)
   Call Write_rtl8019as(rdmaport , 85)

   Call Write_rtl8019as(rdmaport , &HFF)                    'Broadcast
   Call Write_rtl8019as(rdmaport , &HFF)
   Call Write_rtl8019as(rdmaport , &HFF)
   Call Write_rtl8019as(rdmaport , &HFF)
   Call Write_rtl8019as(rdmaport , &HFF)
   Call Write_rtl8019as(rdmaport , &HFF)

   Call Write_rtl8019as(rdmaport , 192)                     'Cél IP címe
   Call Write_rtl8019as(rdmaport , 168)
   Call Write_rtl8019as(rdmaport , 0)
   Call Write_rtl8019as(rdmaport , 30)

  'Karakterek beírésa, hogy elérjük a minimális csomaghosszt
   For I = 0 To &H11
      Call Write_rtl8019as(rdmaport , &H00)
   Next I

   Byte_read = 0
   Do
      Hulp1 = Byte_read And Rdc
      Call Read_rtl8019as(isr)
   Loop Until Hulp1 = 0

   Call Write_rtl8019as(tbcr0 , &H3C)
   Call Write_rtl8019as(tbcr1 , &H00)
   Call Write_rtl8019as(cr , &H24)


Nem olyan elegáns, mint Ben ARP-je, de szerintem ha valaki nem csinált iylet, átláthatóbb! :wink:


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég