RubberduckExperience: Unterschied zwischen den Versionen

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche
(C6 Script zum resetten des NIC.)
 
Zeile 80: Zeile 80:
 
PB3    INPUT  HIGH            PB3
 
PB3    INPUT  HIGH            PB3
 
</source>
 
</source>
 +
 +
Nach einigen Minuten Uptime - abhängig von der Load und der Netzwerklast hängte sich mein AVR-NET-IO vom LAN ab, war aber sonst noch (per seriell z.B.) erreichbar.
 +
Dies habe ich mit C6 in den Griff bekommen, indem ich minütlich den Chip resette:
 +
 +
<source lang="ini">
 +
CONTROL_START
 +
ON ONCE CLOCK_SEC != 61 DO init_enc28j60();
 +
END
 +
CONTROL_END

Aktuelle Version vom 12. Mai 2010, 10:03 Uhr

Meine ersten Versuche mit Ethersex hatten das Ziel, eine bessere Firmware für den AVR-NET-IO zu schaffen, die das selbe Pinout nutzt wie von Pollin vorgegeben.

Es sollte an Fli4l ein externes LC-Display über LAN sowie 8 Schalter und 8 LED angeschlossen werden, mit denen der Internetzugang für bis zu 8 Rechner z.B. von der Küche aus zu steuern geht.

Der größte Anreiz bestand darin, daß Pollin nur 2x16 Displays unterstützt, deren Anzeigeumfang - nunja - begrenzt ist.

Dazu brauchte ich eigentlich nur LCD aktivieren und folgendes Pinout hinterlegen:

Die folgende Datei habe ich damit erzeugt: (pinning/hardware/user_avrnetio.m4)

dnl
dnl user_avrnetio.m4
dnl
dnl Pin Configuration for 'user_avrnetio'.  Edit it to fit your needs.
dnl

/* port the enc28j60 is attached to */
pin(SPI_CS_NET, SPI_CS_HARDWARE)

pin(HD44780_RS, PD3)
/* Uncomment if you wirded RW Pin and/or want to use readback support */
pin(HD44780_RW, PD2)
pin(HD44780_EN, PB0)
pin(HD44780_D4, PD4)
pin(HD44780_D5, PD5)
pin(HD44780_D6, PD6)
pin(HD44780_D7, PD7)

Das Grundgerüst dafür erzeugte ich wie folgt:

erst die config erstellt mit FULL-Featured IO (weiß nicht ob das wirklich nötig ist) und LCD an. HD44780 Controller. Danach abspeichern, das script 'scripts/add_hardware avrnetio' aufgerufen, welches das Grundgerüst für das Pinning des o.g. Files ergibt. Danach habe ich nur noch das Pollin Pinout aus der Anleitung des AVR-NET-IO abgepinselt und übertragen.

Der Atmega32 kann keinen ethersex-bootloader ausführen. Dabei gibts Flash-Fehler. Deshalb habe ich diesen Versuch aufgegeben.

Die Fuses habe ich von dinus übernommen:

avrdude -p m32 -c ponyser -P /dev/ttyS0 -U lfuse:w:0xBF:m -U hfuse:w:0xCA:m

Wenn man, wie ich, den Fehler macht, sich den atmega32 kaputtzufusen, hilft ggf. folgender Konstrukt: Ein USB->PS/2 Adapterkabel kann einen Takt von 6 bis 12 MHz erzeugen (je nach Variante anders, aber das reicht sicher). Diesen einfach an Pin13 des Atmega32 anlegen (von Pin4 der PS/2 Buchse) und los gehts.

Zum schluß habe ich noch Named-IO aktiviert mit folgender Konfiguration (pinning/named_pin/avr_net_io)

#
#   Named Pin Configuration File
#
# You can assign names to your microcontroller's pins here.
# Keep in mind that this names must consist of alphanumeric
# characters only!
#
# Every line starting with a hash sign (#) is a comment.
#
#
# PIN | IN/OUT | When active? | Name
#-----+--------+--------------+----------------
PC0     OUTPUT   HIGH           OUT1
PC1     OUTPUT   HIGH           OUT2
PC2     OUTPUT   HIGH           OUT3
PC3     OUTPUT   HIGH           OUT4
PC4     OUTPUT   HIGH           OUT5
PC5     OUTPUT   HIGH           OUT6
PC6     OUTPUT   HIGH           OUT7
PC7     OUTPUT   HIGH           OUT8
PA0     INPUT    HIGH           IN1
PA1     INPUT    HIGH           IN2
PA2     INPUT    HIGH           IN3
PA3     INPUT    HIGH           IN4
PA4     INPUT    HIGH           IN5
PA5     INPUT    HIGH           IN6
PA6     INPUT    HIGH           IN7
PA7     INPUT    HIGH           IN8
#
# Norm/Prog Jumper
PB1     INPUT   HIGH            PB1
#
# Free Pin on EXT Port
PB3     INPUT   HIGH            PB3

Nach einigen Minuten Uptime - abhängig von der Load und der Netzwerklast hängte sich mein AVR-NET-IO vom LAN ab, war aber sonst noch (per seriell z.B.) erreichbar. Dies habe ich mit C6 in den Griff bekommen, indem ich minütlich den Chip resette:

<source lang="ini"> CONTROL_START ON ONCE CLOCK_SEC != 61 DO init_enc28j60(); END CONTROL_END