www.mikrocontroller.net

Forum: Codesammlung Webradio - atmega644, vs1053b, enc28j60,sd - mit multitasking und timer management

Autor: Sebastian Meuren (neruem)
Datum: 09.03.2008 22:22
Dateianhang: code_v0.01.zip (466,8 KB, 362 Downloads)

Hallo Zusammen!

Ich weis, es gibt mitlerweile schon einige Projekte, welche avrs,
tcp/ip, sdkarte, multitasking, etc. miteinander verbinden, aber als ich
damit angefangen habe mit AVRs rumzuspielen, war das noch nicht ganz so.
Das Projekt ist so um 2002/03 rum ins Leben getreten und hat einige
Zwischenstationen durchlebt. Ich will noch nicht behaupten, dass alles
perfekt ist, ganz im Gegenteil. Viel von dem Code bedarf noch der
Ueberarbeitung, aber vielleicht ist ja das Ein oder Andere fuer den
einen oder Anderen brauchbar. Bei mir laeuft das ganze immerhin schon
soweit, dass ich Webradio hoere, sowohl ogg als auch mp3-streams direkt
vom Internet (wie z.B. Deutschlandfunk,etc.) als auch LastFM. Das
momentane Setup bei mir im Wohnheim sieht so aus, dass wir einen
Proxyserver haben und ich mich ueber diesen ins Internet einwaehle. DHCP
ist zwar schon etwas gediegen, aber in der momentanen Version noch nicht
wirklich benutzbar. Der Quellcode unterschuetzt FAT16/FAT32 SD-Karten
(zumindestens unter 4GB getestet, HD hatte ich mal angedacht, weis im
Moment aber nicht wie gut das funktioniert, da ich keine solche Karte
habe!) (fuer FAT16 muss ein Ordner ROOT angelegt sein, der dann als
Wurzelverzeichnis interpretiert wird) Das Root-Verzeichnis der Karte
wird in einer Dauerschleife abgespielt (falls direkt wav/ogg/mp3 Dateien
vorhanden sind) Im Falle einer m3u-Datei wird der dortige Link abgerufen
und der Stream aus dem Internet wiedergegeben. Eine .lfm-Datei (kein
offizieller Standard) wird so interpretiert, dass die erste Zeile als
lastfm-Benutzername, die zweite als md5sum des Passwortes und die dritte
als Kuenstlername interpretiert wird. Dann wird eine Verbindung zu
lastfm hergestellt und der entsprechende Stream abgespielt.
Zum Einsatz kommen vs1053b von vlsi, enc38j60 von microchip und ein
atmega644 (der ueber JTAG programmiert/gedebugged werden kann, die
Leitungen sind auf eine Pfolstenleiste zusammen mit einigen anderen
gefuehrt)

Der Quellcode gliedert sich in mehrere Teile:

* Kernel: Sorgt fuer eine sehr kleine Multitasking-Umgebung, die einen
Event-Mechanismus zur Synchronisation und Timer zur Verfuegung stellt

* TCP/IP Stack: unterstuetzt vor allem TCP, IP, ICMP (ping), ARP, UDP
nicht wirklich, DHCP ansatzweise (muss noch etwas aufpoliert werden...)

* FAT/SDCARD Unterstuetzung

fuer Hinweise, Tipps, etc. bin ich dankbar, email:
SebastianNeruem@gmx.de
Autor: Sebastian Meuren (neruem)
Datum: 09.03.2008 22:22
Dateianhang: wogg-v0.01.zip (104,3 KB, 246 Downloads)

Noch die doppelseitige Platine

viele gruesse,

Sebastian
Autor: Sebastian Meuren (neruem)
Datum: 09.03.2008 23:42
Dateianhang: bottomview.jpg (192,2 KB, 951 Downloads)
preview image for bottomview.jpg

rueckseite der platine...
Autor: Sebastian Meuren (neruem)
Datum: 09.03.2008 23:42
Dateianhang: topview.jpg (178,9 KB, 861 Downloads)
preview image for topview.jpg

oberseite der platine...
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 10.03.2008 00:19

Sehr interessantes Projekt, gab ja schon ein paar anläufe hier sowas zu
bauen, aber ich glaube bis jetzt ist noch kein Projekt wirklich zuende
geführt worden!

Gibt es auch die möglich keit spezielle LastFM Radiostationen (von
anderen Usern) abzuspielen? Wenn nicht wäre das noch eine sinnvolle
ergänzung finde ich.

Außerdem vielleicht ein Display zur eingabe der Stream-adresse bzw. der
Radiostation.
Autor: Sebastian Meuren (neruem)
Datum: 10.03.2008 01:09

Hallo Hauke,

lastfm basiert auf den infos von

http://gabistapler.de/blog/index.php?/archives/268...

ich denke, da ist nicht viel Arbeit noetig nicht die Artist station
sondern die neighbour station einzutunen (wenn du das meinst)

Display habe ich noch nicht am start, kann man aber ueber die
Pfostenleiste anschliessen, dafuer habe ich die vorgesehen!

viele gruesse, Sebastian (-:
Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum: 10.03.2008 01:32

Sehr schön, eine Sache mehr zum basteln ;)
Hast du zufälligerweise noch so ne Platine rumfliegen? :D
Als diyplay Sollte ja schon nen Textdisplay reichen, wobei nen schönes
Graphisches da auch sehr schick wäre, habe beides hier, werd nach dem
ABI (2 Wochen) dann mal etwas basteln :D
Autor: Commtel (Gast)
Datum: 10.03.2008 06:20

sehr schönes projekt

wer hat den vs1053b den auf lager?

c.u
Commtel
Autor: Sebastian Meuren (neruem)
Datum: 10.03.2008 09:12

Hallo zusammen,

Platinen sind gerade aus, ich habe nur den Prototypen aufgebaut, die
loecher muessten sowieso noch etwas groesser ausgelegt und ein elko
versetzt werden (habe ich in die readme.txt geschrieben). Den vs1053b
koennte es mittlerweile bei segor geben wenn man nochmal eine Anfrage
stellt (die haben mir damals gesagt, dass sie den vielleicht spaeter ins
programm aufnehmen), ansonsten bei vlsi auf der homepage im webshop
(dort habe ich die bestellt) Aber vielleicht bekommt man ja irgendwen
ueberredet den chip ins Programm aufzunehmen....

viele gruesse und Danke fuer das Feedback, Sebastian (-:
Autor: Andreas Watterott (andreasw) Benutzerseite
Datum: 10.03.2008 10:04

Hallo,
Ich baue auch gerade ein Webradio mit einem ATmega644:
http://www.watterott.net/webradio.php

Wie sieht es bei dir eigentlich mit dem Buffern aus?
Ich habe bei mir mit 384-DSL und den ca. 3kb des AVRs schon Probleme.
Daher habe ich noch ein F-Ram mit eingebaut.
Autor: Sebastian Meuren (neruem)
Datum: 10.03.2008 10:56

Hallo Andreas,

bei mir laeuft das ganze so ohne Probleme, ich komme mit dem 2048-byte
FIFO des vs1053b aus, allerdings betreibe ich das Ganze auch an einem
proxyserver, ich weis daher nicht, wie es ohne diesen performed (wir
haben im Wohnheim so ein Ding, ueber den der ganze Trafic laeuft, daher
geht es gar nicht anders)

Irgendwann werde ich das Ganze wohl mal direkt an einer DSL-Leitung
testen, aber die Moeglichkeit habe ich hier leider nicht...

Allerdings hat der enc28j60 auch nochmal 8kByte SRAM on board, die ich
bisher aber noch nicht direkt mitverwende (packete werden in einen
1kByte FiFo einsortiert und von dort an den vs1053b weitergereicht, ich
melde nur den dortigen Platz als Windowsize an den Server. (Der Tcp-Code
unterstuetzt auch noch kein Reassembeln der Packete) Bisher laeuft das
Problemlos, sowohl von LastFM als auch von diversen Webstreams.

Wie sieht das bei dir aus, wieviel Buffer hast du im Ethernet-Chip?

viele gruesse, Sebastian
Autor: Sebastian Meuren (neruem)
Datum: 10.03.2008 10:57

Noch eine Nachfrage: Wie machst du das mit USB, bzw. was wird alles so
unterstuetzt?

Viele Gruesse, Sebastian
Autor: Andreas Watterott (andreasw) Benutzerseite
Datum: 10.03.2008 11:27

Der Ethernet-IC hat bei mir 4kb und ich habe noch mal 1kb im AVR und
32kb im F-Ram. Damit spielt das Radio ca. 3s weiter, wenn ich das
Netzwerkkabel ziehe. (128kb/s Stereo Stream).

Unterstützt wird zur Zeit nur das Abspielen von MP3-Streams. Ich bin
gerade an der Menüsteuerung. Später soll noch von Netzwerkfreigaben und
SD-Karte abgespielt werden können.

Die USB-Buchse auf der Hauptplatine ist nur zur Stromversorgung für die
Lautsprecher und die auf der PickUp-Platine ist für Debugausgaben
(FT232).
Versorgt wird das Radio über PoE.
Autor: Sebastian Meuren (neruem)
Datum: 10.03.2008 12:26

Hi Andreas,

vielleicht ist dann wohl mein setup direkt an einem router der keinen
proxyserver mitbringt etwas knapp, danke fuer die Infos!!! Wenn ich das
naechste Mal die Moeglichkeit habe das zu testen, werde ich das
ausprobieren...

Mann koennte ansonsten den atmega644 gegen einen der 640-Reihe
austauschen (8 anstelle 4kByte internes RAM), genug Platz duerfte sein
bzw. einen der neuen xmega (die es wohl noch nicht gibt,... bis zu
16kbyte intern)

Wie bindest du das externe RAM eigentlich an? Ist 32kByte die
Untergrenze ab der es bei dir fluessig laeuft?

Viele gruesse, Sebastian (-:
Autor: Andreas Watterott (andreasw) Benutzerseite
Datum: 10.03.2008 13:43
Dateianhang: WebRadio.pdf (263,9 KB, 440 Downloads)

Hallo Sebastian,

Wenn ich die vollen 4kb des AVRs ausnutze (2-3kb für Buffer und 1500byte
für das Ethernetpaket), dann funktioniert das Abspielen auch flüssig.
Sobald man aber im Internet nebenbei surfen will, dann bricht alles
zusammen. 32kb sollten es dann schon sein.

> Wie bindest du das externe RAM eigentlich an?
Der F-Ram ist über SPI angeschlossen: http://www.ramtron.com/
Anbei auch mein Schaltplan.
Autor: Sebastian Meuren (neruem)
Datum: 10.03.2008 14:28

Hallo Andreas,

das mit PWRoE sieht sich gut an, danke fuer den Schaltplan!
Die SPI-RAMs von deinem Link sehen ziemlich gut aus. Auf der Platine ist
auf jeden Fall noch ein wenig Platz neben dem Atmel, da liesse sich auch
noch ein solcher Chip unterbringen (neben ENC28J60 und AVR, dort ist
auch der SPI-Bus gerouted) Vom Timing mueste es auch keine Probleme
geben, der momentane Code schaft (PC->AVR) etwas ueber 1Mbit effektiven
Datendurchsatz, da duerfte das Zwischenpuffern im SPI-RAM auch noch
reinpassen...

Was benutzt du eigentlich fuer Software?

viele Gruesse, Sebastian (-:
Autor: Andreas Watterott (andreasw) Benutzerseite
Datum: 11.03.2008 09:47

>Was benutzt du eigentlich fuer Software?
Selbst geschriebene ;-)
Ich weiß noch nicht genau, ob ich alles veröffentliche. Auf jeden Fall
die ganzen Low-Level-Routinen für CP, VS, F-Ram, LCD... Ist zur Zeit
alles auch noch pre-alpha Stadium. Ich bin erst seit ungefähr 3 Monaten
an dem Projekt und die Bilder sind vom ersten Prototypen. Leider gibt es
keine RJ45-Buchsen mit Übertragern (Rx 1:1, Tx 1:2) und PoE für den
CP220x. Die Buchse die ich verwende ist eigentlich für den ENC gedacht
(Rx 1:1, Tx 1:1). Daher muss ich die Platine auch noch einmal ändern.
Aber sonst funktioniert alles soweit.
Autor: Sebastian Meuren (neruem)
Datum: 17.03.2008 18:00

Hallo Andreas,

ich weis nicht wie dein Zeitplan so aussieht (ich habe im Moment leider
nicht alszu viel Zeit, viel an dem Projekt weiterzuentwickeln), aber ich
habe auch schon an SMB-Unterstuetzung gedacht, vielleicht koennte man da
zusammenarbeiten oder auf Code zurueckgreifen, den es schon gibt (habe
mich da noch nicht umgeschaut, aber auch schon daran gedacht)!

viele gruesse, Sebastian (-:
Autor: Andreas Watterott (andreasw) Benutzerseite
Datum: 17.03.2008 18:56

Ich habe ebenfalls gerade viel zu tun...
Die SMB-Unterstützung werde ich auch erst zum Schluss in Angriff nehmen.
Als nächster Schritt ist bei mir ein Web-Interface zum Konfigurieren
geplant...

Es gibt bereits ein fertiges Webradio mit SMB-Unterstützung:
http://www.gurulib.com/_project/wmp3/index.htm
Autor: Sebastian Meuren (neruem)
Datum: 18.03.2008 00:38

Danke fuer den Link!

viele Gruesse, Sebastian (-:
Autor: Andreas Watterott (andreasw) Benutzerseite
Datum: 28.03.2008 11:44

Hallo,

Ich bin letzte Woche beim Bestellen über das Stellaris LM3S6965
Evaluation Kit gestolpert:
http://www.luminarymicro.com/products/lm3s6965_eth...
Der LM3S6965 ist ein Cortex-M3 mit Ethernet und 64Kb RAM. Das wäre eine
Alternative zu AVR + Ethernet-Controller + externen RAM...

Mittlerweile habe ich das Kit auch schon bekommen und ein bisschen mit
herumgespielt. Als nächstes versuche ich mal meinen AVR-Code auf den ARM
zu portieren und einen Stream über das Board abspielen zu lassen.

Gruß
Andreas
Autor: Harald Kipp (Firma egnite GmbH) (haraldkipp)
Datum: 08.04.2008 19:31

Zur Frage der RAM Größe kann ich folgendes beitragen: Die TCP basierten
Stationen (SHOUTcast, IceCast) bauen einen Puffer auf, indem sie ein
paar Sekunden zeitversetzt streamen. Wenn der Client connected, bekommt
er diesen Puffer mit maximal möglicher Transferrate übermittelt, bevor
der Stream dann auf die Dauerrate heruntergeht.

Beim PC hat das den Vorteil, dass man kurzfristig genug puffern kann, um
spätere Latenzen, die es bei TCP halt gibt, auszugleichen. Bei kleinen
Embedded Systemen ist das eher hinderlich. Der Server hat fortwährend
jede Menge Daten zum Verschicken, die aber nicht abgeholt werden. Statt
dessen meldet der kleine Client dauernd, dass sein TCP Puffer voll ist
und der Server beginnt zu pollen. Das alles erzeugt zusätzlichen
Traffic, was dem Client noch mehr zu schaffen macht.

Eine Alternative ist, den Anfangspuffer einfach wegzuwerfen und dann den
Stream mit normaler Spielgeschwindigkeit abzuholen. Dann fällt zumindest
das Pollen weg. Bleibt TCP tatsächlich mal hängen, was ohne weiteres ein
paar Sekunden dauern kann, fällt die Musik natürlich sofort aus.

Die ganzen Probleme hat man nicht so deutlich, wenn noch irgendwo einen
PC dazwischen geschaltet ist (z.B. ein Proxy). Ansonsten puffern die
meisten SHOUTcast Stationen so um die 256k. Für einen AVR bleibt da nur
banked RAM. (Gibt's eigentlich SPI oder I2C RAM?)

Auch wenn es ähnliches schon länger gibt, das Projekt beeindruckt mich.

Grosses Lob,

Harald
Autor: Andreas Watterott (andreasw) Benutzerseite
Datum: 24.05.2008 21:25

Hallo,

Ich bin jetzt endlich dazu gekommen den VS an das
LM3S6965-Evaluation-Kit anzuschließen und habe mal ein kleines Video
gemacht:

http://www.watterott.net/webradio_cortex.php

Zur Zeit funktioniert nur das Abspielen von Streams. Die Adressen der
Stationen und die Einstellungen (IP, NetMask, Gateway...) werden von
einer SD-Karte gelesen. Das Zappen durch die SD-Karte geht auch schon...
Wenn alles funktioniert und ich den Code hübsch gemacht habe, dann
werden ich ihn auch freigeben.

@ Harald
Mit dem Vorpuffern habe ich bis jetzt noch keine Probleme bemerkt und
ein erhöhtes Datenaufkommen ist mir beim Loggen mit Wireshark auch noch
nicht aufgefallen.

> Gibt's eigentlich SPI oder I2C RAM?
Mir sind eigentlich nur die F-RAMs von Ramtron bekannt.

Gruß
Andreas
Autor: Simon K. (simon) Benutzerseite
Datum: 24.05.2008 22:38

Habe mich selber auch schon an soetwas versucht. Bin aber mit dem 4kB
RAM des Mega644 nicht sehr weit gekommen. Fast alle Stationen haben
geruckelt beim Abspielen (außer im lokalen Netzwerk, aber ist ja auch
logisch). 32kB Buffer bei 256kbit/s Streams ist definitiv Minimum, würde
ich sagen.
Autor: Sebastian Meuren (Gast)
Datum: 15.06.2008 12:11

Hallo zusammen!

Entschuldigung, ich war hier schon laenger nicht mehr online...

Aber vielen Dank fuer eure Beitraege! Auch an Harald vielen Dank fuer
das Lob!!!!

@Andreas: Beeindruckendes video, glueckwunsch, sieht sich sehr gut
an!!!!

Viele Gruesse,

Sebastian (-:

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net