Hallo,
sicherlich kennen einige von euch den sogenannten Daft-Punk Tisch. Nun
würde ich eben solch einen Tisch gerne nachbauen.
Der Tisch soll aus 5x5 Feldern bestehen und die Abmessungen weiß ich
jetzt noch nicht ;).
Dazu möchte ich einen ATmega16 per Mikrofon ansteuern und im Code werden
die einzelnen Muster (~150-200 Stück) aufgerufen und anschließend per
LEDs angezeigt. Bei jedem weiteren "Ton" wird eben ein Muster
weitergeschaltet.
Nun habe ich mich für eine etwas aufwendigere Schaltungsvariante zur
Auswertung des Audiosignals entschieden. Per OP wird das Signal
verstärkt sowie auch automatisch geregelt.
Bis jetzt sind "normale" LEDs vorgesehen, diese sind aber mit Sicherheit
zu dunkel um eine homogene Ausleuchtung eines Feldes zu erzeugen.
Müsste dann doch Superflux LEDs verwenden ? Nur dann wäre ja der BC337
nutzlos und ich müsste auf einen MOSFET umsteigen ?
Das ganze wird per ISP programmiert nur die Verbindung habe ich auf die
schnelle nicht eingezeichnet.
Schaltung könnte man noch für verschiedene Tonarten erweiteren aber das
ist erstmal nach hinten gestellt.
Im Anhang mal die Schaltungsidee. Über Kritik, Anregungen sowie
Verbesserungsvorschläge wäre ich erfreut!
Gute Nacht und Gruß!
Moin!
Was ist mit Pin 28?
C5 würde ich kleiner wählen oder gar ganz weg lassen.
Die Ansteuerung Deiner LEDs ist nicht vorteilhaft.
Am Emitter liegen 0,7V weniger, als an der Basis. Rechne am Emitter mal
mit 4,2V. Selbst bei roten LEDs mit 1.6V Flussspannung bleiben dann nur
3mA pro Zweig.
Bei dieser Beschaltung könntest Du auch den Basiswiderstand entfernen.
Solltest Du sogar.
Ich würde eine Emitterschaltung (Emitter an GND) vorziehen. Dort
brauchst Du den Basiswiderstand dann allerdings.
Vorteil wäre, daß Du die LEDs dann in Reihe schalten und direkt an 15V
hängen könntest. Dadurch würde weniger Strom fliessen. Durch den
Transistor, den Spannungsregler, insgesamt.
Aber vor allem: Den Arbeitswiderstand für die LEDs korrekt ausrechnen!
Ich kann im Schaltbild nicht erkennen, wo der OP seine Versorgung her
holt.
Gruß
Jobst
Hallo,
sodele erstmal Danke für die Antworten. Also das um die Uhrzeit ;)
@ Jobst
Pin 28 hatte ich vergessen... Gleiches gilt auch für die OP
Versorgungsspannung. Habe ich aber nun geändert.
Des Weiteren habe ich C5 am RESET auf 10n verkleinert. Hatte es halt
immer so mit 100n gegen GND.
Die LED Schaltung habe ich nun wie du Vorgeschlagen hast abgeändert
(hattest du doch so gemeint ?) und zwar mal mit 4 LEDs in Reihe und der
Vorwiderstand ist für die LEDs (rot) mit 20mA und 1,6VF gewählt worden.
Habe das ganze in Multisim simuliert und etwas an den Werten
herumgespielt.
@ Henk
Hmm gute Frage zwecks Arrays. Hätte ich dadurch "erheblich" Vorteile ?
Hast du mir einen Tipp in welchem Shop ich gute Highpower LEDs bekommen
würde ? Sind diese denn auch vorselektiert ?
Danke für eure Hilfe!
Gruß
Edit: So nun sollte es der richtige Plan sein... Ok, Versuch Nummer 3
:).
Pascal K. schrieb:> So nun sollte es der richtige Plan sein... Ok
Die D1 macht nur Sinn, wenn es irgendwo ein passende Sicherung gibt, die
vor der Diode aufgibt.
Michael A. schrieb:> Pascal K. schrieb:>> So nun sollte es der richtige Plan sein... Ok>> Die D1 macht nur Sinn, wenn es irgendwo ein passende Sicherung gibt, die> vor der Diode aufgibt.
Hallo Michael,
dann werde ich mal noch davor eine Sicherung vorsehen.
Wenn ich das dann richtig verstehe, schließt die Diode die
Versorgungsspannung kurz und dadurch spricht die Sicherung an und
verhindert den Kurzschluss sowie das die Diode mit Qualmzeichen sich
meldet ?
Edit: Ist dies eigentlich die "Nummer. 1" Variante ? Hatte jetzt gerade
auch etwas mit MOSFET-Absicherung gelesen aber da verbraucht man doch
ne' ordentliche Mindestspannung sowie das die Schaltung auch Strom zieht
?
Gruß
.
|----|
15V---|>|----7805|--
|----|
|
GND-----------------
Nachdem es ja wohl egal ist ob Energie am 7805 oder an einer in Reihe
davor geschalteten Diode als Wärme verloren geht, würde ich den
Verpolschutz wie oben gezeigt realisieren (von mir nicht gezeichnete
Bauteile am 7805 bitte trotzdem beibehalten).
PS. max. Strom bei Diodenauswahl beachten
Es macht wenig Sinn, erst über R5/C11 eine gefilterte
Versorgungsspannung zu erzeugen, und dann den Verstärker mit R7 an eine
ungefilterte zu hängen. R7 kommt an C11. Auch sind 10k für R5/R6 bei 5V
recht viel, du rezuzierst die Ausgangsspannung deines Mikros um den
Faktor 10 und musst hinterher nur stärker verstärken. Nimm für die
üblichen 2k Elektret-Mikros 1k. Auch müssen bei 50K Eingangsimpedanz
keine 10uF Klötze da dran, nimm 2u2, das reicht ja wohl für die
Frequenzuntergrenze.
Die weitere "Auswertung" des Audiosignal soll wohl eine
Lautstärkeregelung sein, ich kennen normale Sch altungen aber mit Q1 als
JFET und man leitet nicht zur absoluten Masse ab sondern zur virtuellen
Masse. Auch sind 1N4004 zur Audiosiganlbearbeitung vollkommen
ungeeignet, 1N4148 tun's.
Ich glaube du hast hier 2 Schaltungen kombiniert, von denen du keine
verstanden hast. Schau noch mal nach, wie man Dynamikkompressoren
richtig baut.
Auch ist die Schaltung mit Q2 und 330 Ohm (wieso 330? Als PullDown tun
es 4k7 oder auch 10k) sehr merkwürdig, es soll wohl ein
Schwellwertschalter sein. Prüf mal (in LTSpice) nach, ob die Schaltung
tut was du dir von ihr erwartest, sie hat einen Effekt, da man das aber
normalerweise anders baut, nehme ich an: eher einen unerwünschten
Effekt.
Das R2 zu gross dimensioniert ist, T1 besser ein PNP wäre (oder Masse
schaltet) und 2 (blaue) LEDs zu viel an 5V sind, wurde schon gesagt.
Wenn du alle LEDs in Reihe schaltest, brauchst du zwar über 16V,
brauchst aber nur wenig Strom uz schalten. 74LS07 tun es dann als
Treiber.
Hallo,
vielen Dank MaWin für deinen Beitrag! Dann werde ich mich mal in
Dynamikkompressoren einarbeiten. Audiosignalauswertung ist für mich
Neuland aber bin bereit mir weiteres anzueignen (will ja auch noch was
lernen).
Wieso blaue LEDs ? Klar das diese eine höhere VF haben aber ich habe das
ganze erstmal nur für rote realisiert.
Es erwartet mich noch einiges an arbeit aber ich freue mich drauf :).
Grüße
Pascal K. schrieb:> Also das um die Uhrzeit ;)
Ja, blöd, wenn man vor Schmerzen nicht schlafen kann :-/
MaWin schrieb:> ich kennen normale Sch altungen aber mit Q1 als> JFET und man leitet nicht zur absoluten Masse ab sondern zur virtuellen> Masse.
Dafür tuts C14 - es geht hier ja nicht darum ein HiFi-Signal an den
Prozessor zu schicken, sondern nur Bass-Takt-Impulse.
Abgesehen von den von MaWin am Mikrofon vorgeschlagenen Änderungen, gebe
ich der Schaltung eine Chance.
Auch mit der Beschaltung um Q2 herum. Dort wirst Du vermutlich den
Pullup des ATmega benutzen - da würde ich nicht noch 10K in Reihe
hängen. 390Ω sind da schon okay, falls man mal den Port des ATmega
falsch konfiguriert.
Gruß
Jobst
Na dann hoffe ich das es dir besser geht Jobst. :)
Nun zu den Schaltungen die in den letzten Tagen entstanden sind, da ich
die letzten Tagen etwas ausprobieren konnte:
1. Variante (Transistor Q2):
Die erste Variante (siehe Bild 1 des Anhangs) hat schon sehr sehr gut
funktioniert! Die LED9 hat freudig geblinkt :). Diese war zwar noch
etwas empfindlich bei schnelleren Basslines aber ich war mit dem
Ergebnis zufrieden. Die Empfindlichkeit könnte man ja später per Pausen
im Controller festlegen (Ab wann sich der Controller das nächste Muster
holen soll).
Da aber die Ausgangsspannung des Transistor Q2 viel zu gering war um mit
diesen paar mV und dem Controller zu arbeiten, überlegete ich mir
anstelle des Transistors einfach einen Komparator einzusetzen.
Klar ist das der LM358 kein rail-to-rail OP ist aber es würde ja eine
Ausgangsspannung >2-2,5V reichen um mit diesem arbeiten zu können.
2. Variante:
Nun eben die zweite Variante. Der Spannungsteiler mit Komparator ist so
dimensioniert das er ab 650mV in die positive Sättigung gehen soll und
mir anschließend per Programm die LEDs einschalten soll. Sobald diese
650mV wieder unterschritten werden, sollen die LEDs wieder ausgehen.
Nun eben hier mein Problem. Ich weiß jetzt leider nicht genau woran es
liegt ob es an der Komparatorbeschaltung liegt oder doch an meinem Code
?!
Zum Testen wollte ich PC0 einschalten. Und diesen Ausgang per dem Signal
steuern. Nur irgendwie sind diese LEDs immer an... Egal ob ein Signal da
ist oder nicht. Nun weiß ich nicht an was das liegen könnte da der
Komparator arbeitet (was ich eben mit meinem alten HAMEG HM705 :)
festellen konnte).
Wäre super wenn sich das mal jemand anschauen könnte. Ich bin grad etwas
ratlos...
Vielen Dank schonmal für eure Hilfe.
Pascal K. schrieb:> Na dann hoffe ich das es dir besser geht Jobst. :)
Die Hoffnung stirbt zuletzt ... leider nicht :-(
Pascal K. schrieb:> 1. Variante (Transistor Q2):> Die erste Variante (siehe Bild 1 des Anhangs) hat schon sehr sehr gut> funktioniert! Die LED9 hat freudig geblinkt :). Diese war zwar noch> etwas empfindlich bei schnelleren Basslines aber ich war mit dem> Ergebnis zufrieden.
Warum bleibst Du dann nicht bei dieser Variante?
Mit dem OP kann das so nämlich nicht richtig funktionieren, dafür mußt
Du die Schaltung neu dimensionieren.
Der Transistor ist dort genau das richtige Bauteil.
Also: Mit dem Kollektor von Q2 an den Eingang Deines µCs!
So wie es vorher schon mal war ...
Gruß
Jobst
Ohje das hört sich ja nicht toll an aber die Hoffnung stirbt zuletzt :).
Gute Besserung!
Vielen Dank schonmal Jobst das du auf meine PN reagiert hast!. Echt
klasse!
Nun zur Schaltung:
Ich würde schon sehr gerne bei der Transistorvariante bleiben (da diese
ja auch funktioniert hat) nur ist die Ausgangsspannung am Transistor Q2
Collector (-> 390R -> µC) zu gering und der µC sieht die ca. 600-800mV
leider nicht als High an. (Kann das leider nicht besser messen).
Dachte ich könnte das per Komparator am besten lösen aber das ich dann
alles neu dimensionieren müsste wäre nicht mein Ziel.
Wie kann ich das denn am besten lösen damit mein µC das als "High"
ansieht ?
Mit einem nichtinvertierenden Verstärker oder anders ?
Gruß
In meinem kleinen Testprogramm hatte ich die Pullups schon aktiviert,
scheint aber nicht auszureichen.
Werde es dann mal mit dem 1k am Kollektor ausprobieren. Hatte mir schon
so etwas gedacht nur war ich mir nicht sicher ob diese "simple" Methode
funktionieren könnte. Danke!
Melde mich sobald ich es getestet habe
Gruß Pascal
Mit der einzelnen LED, direkt am Transistor funktioniert es wunderbar,
sobald ich das ganze per µC realisieren möchte, habe ich meine Probleme.
@ Jobst: Sorry für diese "doofe" Frage aber kannst du mir das mal kurz
aufzeichnen wie du das mit den 1k meinst ? Ich hatte es so ausprobiert:
5V -> 1k -> Kollektor und zwischen 1k und Kollektor sind noch die 390R
zum µC.
Nur dann leuchten die LEDs dauerhaft... ohne die 1k Variante bekomme ich
zwar Signale an den µC nur viel zu schwach und mit dem 1k habe ich
dauerhaft ca. 5V anliegen...
Solangsam bin ich am verzweifeln... :(.
Habe auch nochmals das kleine Testprogramm überarbeitet da ich noch
einige Fehler drin hatte...
Bin grad echt ratlos...
Ich würde sagen, daß Du es so gemacht hast, wie ich meine:
+5V
|
1KΩ
|
+--390Ω----> ATmega
|
|/
-| Q2
|<\
|
|
GND
Sonst mußt Du den 1kΩ vergrößern ...
Trotzdem wundere ich mich ein wenig, denn die LED hat der Transistor ja
zum leuchten bekommen, ein paar mA schafft er also. Warum also hast Du
permanent 5V am Eingang?
Gruß
Jobst
So habe nun etwas ausprobiert.
@ Jobst: Genau so wie du es gezeichnet hast, hatte ich es aufgebaut.
Mich wundert das ganze auch gewaltig... Nun hat es aber doch
funktioniert, d.h. mein Testprogramm ist in Ordnung
ABER:
ich habe etwas interessantes herausgefunden weshalb ich immer 5V am
Eingang hatte. Sobald ich mit meiner Versorgungsspannung (vor dem
Spannungsregler), höher als 5V (ca. 5.3V) gehe, leuchten die LEDs die
ganze Zeit. Und ich habe dauerhaft einen HIGH-Pegel an meinem Input!?
Gehe ich mit meiner Versorgungsspannung genau auf die ca. 5V dann sehe
ich wie die LEDs ganz schwach aufleuchten aber auf den Bass reagieren
sowie das ich kein dauer HIGH sondern ein Rechteck-Signal habe.
Nun stellt sich aber die Frage, woher kommt dieser Effekt ?
Ich gehe mit keiner weiteren Verbindung etc. vor dem Spannungsregler auf
irgend ein Anschluss...
Ich habe keine Ahnung an was das liegen könnte ?!
Würde das später schon gerne mit ca. 12V - 15V betreiben.
Gruß Pascal
Vor dem Spannungsregler sollten immer 7.5-8V liegen, sonst kommen hinten
keine 5V raus.
In Deiner Schaltung ist noch irgendwas faul.
Aktuelles Schaltbild? Foto?
Und den Pullup kannst Du auch abstellen.
Gruß
Jobst
Hi,
oh ok, dachte eigtl. ein paar mehr V's würde der Spannungsregler
abkönnen... Dann habe ich ja nochmal glück, das nichts geraucht hat.
Anbei der aktuelle Plan so ist es auch aufgebaut und so war auch die
einzeln blink LED aufgebaut (halt ohne den µC-Teil)
Ich selbst kenne da als Faustregel mindestens +2 oder +3V mehr als die
Ausgangsspannung des Reglers. Die "paar" Volt mehr die "nicht genutzt"
werden, werden ja dann eh in Wärme umgewandelt.
Laut Datenblatt max. 35V aber betreibe es am Ende ja dann mit 12V-15V
dann hat es genug "puffer" nach oben und nach unten :).
Und hast du schon etwas entdeckt ? gespannt bin
Ah sorry mein Fehler... Ich setze grad einen ATmega168 ein. Aber ist ja
eigentlich egal da Pinkompatibel.
Signal liegt zwar am Pin an an nur da rührt sich nichts am Ausgang...
Keinerlei Pegeländerung. Naja die LEDs leuchten nun jedenfalls
nichtmehr.
Also mit der Hexfile sieht es schon um einiges besser aus! Danke
schonmal :)
Was hast du denn geändert ?
Bei 15V Versorgungsspannung erkenne ich noch sehr gut das die LEDs
reagieren, da war bei mir und 5.3V schon schluss.
Nur leuchten die LEDs noch immer die ganze Zeit. Falls mich meine Augen
nicht trügen, versucht er die LEDs auszuschalten als anzuschalten.. hm..
Sollte ich evtl. mal die Beschaltung am BC337 abändern ?
Pascal K. schrieb:> Also mit der Hexfile sieht es schon um einiges besser aus! Danke> schonmal :)
Also ist Deine SW nicht einwandfrei.
Pascal K. schrieb:> Was hast du denn geändert ?
Ich habe dem Kompiler gesagt, daß es ein ATmega168 ist, kein ATmega8.
Pascal K. schrieb:> Falls mich meine Augen> nicht trügen, versucht er die LEDs auszuschalten als anzuschalten.
Richtig. War ja nur ein Test ... hier noch einmal invertiert.
Pascal K. schrieb:> Sollte ich evtl. mal die Beschaltung am BC337 abändern ?
Nein!
Gruß
Jobst
OMG JOBST! Ich liebe dich! :)
Jetzt leuchten zwar noch die 3 anderen Pins vom Port aber das ist egal
denn der richtige blinkt endlich!!!! freuuu
Man bin ich nun happy! :)
Könntest du mir evtl. dein C-Programm zukommen lassen (nicht nur als
.hex) ?
Was genau hatte ich denn nun falsch gemacht ? Das invertieren des Ports
vergessen ?!
Was schulde ich dir für deine großartige Hilfe ?
Gruß
Danke, danke, sooo aufwendig wars nun auch net ;)
Das Programm kann ich dir gerne per E-Mail senden, du kannst mir ja per
PM deine Adresse geben (bin nur grad net zuhause, deshalb kanns bis
Montag dauern)
Gruß,
Jobst
Pascal K. schrieb:> OMG JOBST! Ich liebe dich! :)
#lach#
> Könntest du mir evtl. dein C-Programm zukommen lassen (nicht nur als> .hex) ?
Nö. Es gibt keins.
> Was genau hatte ich denn nun falsch gemacht ?
Evtl. für einen ATmega8 kompiliert?
> Was schulde ich dir für deine großartige Hilfe ?
nääääää ...
Gruß
Jobst
Jobst M. schrieb:> Danke, danke, sooo aufwendig wars nun auch net ;)> Das Programm kann ich dir gerne per E-Mail senden, du kannst mir ja per> PM deine Adresse geben (bin nur grad net zuhause, deshalb kanns bis> Montag dauern)>> Gruß,> Jobst
Wer faket mich denn hier o.O
Jobst nur original registriert ...
Gruß
Jobst
Toller Troll, kann einem unregistrierten auch eine PM senden...
@ The-Original-Jobst :):
Habe nochmals mein "tolles" C-Programm gesichtet. Irgendwie bekomme ich
das grad einfach nicht hin.
Build started 25.6.2011 at 21:23:48
AVR Memory Usage
----------------
Device: atmega168
... usw
Also es ist definitv für ein ATmega168. Könnte ich da auch etwas evtl.
durch die FUSE-Bits vermasselt haben ?
Danke aber für dein .asm Quelltext, evtl. finde ich dann im Debug-Modus
mein Fehler.
Pascal K. schrieb:> Habe nochmals mein "tolles" C-Programm gesichtet. Irgendwie bekomme ich> das grad einfach nicht hin.
C ist nicht meine Baustelle, da kann ich Dir nicht weiter helfen.
Pascal K. schrieb:> Also es ist definitv für ein ATmega168. Könnte ich da auch etwas evtl.> durch die FUSE-Bits vermasselt haben ?
Hmmm ... nö, so wie es aussieht ehr nicht.
Gruß
Jobst
Jobst M. schrieb:> C ist nicht meine Baustelle, da kann ich Dir nicht weiter helfen.
Hast mir aber schon sehr geholfen mit deinem kleinen Testprogramm!
Eine Frage nur noch:
1
loop: in temp, PIND
2
com temp
3
out PORTC, temp
4
JMP loop
damit wird doch der ganze PORTC geschaltet ? Mich wundert es, das nur
der erste Pin reagiert und die anderen LEDs (habs erweitert) dauerhaft
leuchten.
Oder ist das evtl. wie beim PIC bei dem man vorher den Port von analog
auf digital umschalten muss, da dies ja der ADC-Port ist?
Ich suche mal weiter nach meinem "C"-Fehler ;/
Pascal K. schrieb:> damit wird doch der ganze PORTC geschaltet ?
Jopp. Wird einmal komplett kopiert von PortD
Pascal K. schrieb:> habs erweitert
wie?
Pascal K. schrieb:> Oder ist das evtl. wie beim PIC bei dem man vorher den Port von analog> auf digital umschalten muss, da dies ja der ADC-Port ist?
Nein, man muß den ADC aktivieren, um einen ADC-Port davon zu machen.
Gruß
Jobst
Jobst M. schrieb:>> habs erweitert>> wie?
An PC1, PC2 und PC3 nochmals diese Anzeige. 1k - BC337 - LEDs - 150R -
5V. Eben wie an PC0.
PC0 - blinkt
PC1, PC2 und PC3 - dauerhaft am leuchten.
Jobst M. schrieb:> Nein, man muß den ADC aktivieren, um einen ADC-Port davon zu machen.
Ah ok, kenne das nur vom PIC bsp. 16F887 das man hier PORTA "umschalten"
bzw. bestimmte Register clearen muss bevor man diesen digital verwenden
kann.
Gruß
Jobst M. schrieb im Beitrag #2240358:
> Versuch mal dies.>> Bitte die DIV8 Fuse löschen! (für 8MHz Takt)>>> Gruß>> Jobst
DANKE DANKE DANKE....! Kann mich garnicht genug bedanken!!!
Es laufen die einzelnen Portpins sehr toll zur Musik durch! Und durch
die "Wartezeit" sowie auf den Impuls warten, ist die Schaltung um
einiges unempfindlicher geworden und nichtmehr ein "nervöses" geblinke!
kusje :)
Nur mich ärgert es total das ich es selbst noch nicht mit C geschafft
habe ein einfaches Testprogramm zu realisieren sowie nach "einem" Fehler
suchen der eigtl. kein Fehler war... Oh man. Ich glaube ich gehe nun mal
ins Bett und morgen nach einer Lösung suchen.
Nochmals vielen vielen Dank an deine tolle Hilfe ohne die wäre ich glaub
völlig verzweifelt.
Gruß
Pascal K. schrieb:> Es laufen die einzelnen Portpins sehr toll zur Musik durch!
Kannst ja mal ein Video machen :-)
Uuuund Du kannst das 'INC muster' ja mal vor das ANDI setzen. ;-)
1
loop: IN temp, PIND
2
INC muster
3
ANDI temp, 1
4
BRNE loop ; Auf Impuls warten (negative Flanke am Eingang)
Hey Jobst,
ein Video bekommst du auf alle Fälle! (werde ich nachher noch
aufnehmen). Hatte mal schon ein Video der ersten Version gemacht (diese
war ja ohne µC mit der LED und R direkt am Kollektor von Q2).
Ist dann auch sicherlich interessant zu sehen das die Empfindlichkeit
deutlich abgenommen hat durch die "Pausen" sowie die Impulse abwarten.
Jobst M. schrieb:> Uuuund Du kannst das 'INC muster' ja mal vor das ANDI setzen. ;-)
HUIII ;) Das sieht ja spannend aus!!!!
Gruß Pascal
So, wie versprochen die Videos:
https://rapidshare.com/files/3141293461/Daft_Punk_Tests.zip
Es sind insgesamt 3 Videos (per VLC abspielbar):
DPtransistor: erster Test
DPµCnach: mit Jobst seinem .asm Programm
DPµCdurch: mit INC vor ANDI :)
Gruß Pascal
Pascal K. schrieb:> du musst nur auf "Kostenloser Download" klicken und dann etwas warten.
5 Minuten ...
Dann lahmer Download ...
Dann schmiert aufgrund der Last, die diese Seite erzeugt mein Browser ab
und den nächsten Download darf ich in 30 Minuten wagen...
Und die nennen sich 'The Anti-waiting-company'?
Wie kann sich sowas etablieren? *Kopf schüttelt***
Gruß
Jobst
Also ich verstehe das auch nicht... früher war die Wartezeit ohne
rs-account bei max. 45sec und die Geschwindigkeit vom Download war ok.
Ich hatte es vorhin auch mal ausprobiert und war echt sauer das man nun
5 Minuten warten muss... wusste nicht das die es geändert hatten.
Jobst M. schrieb:> Und die nennen sich 'The Anti-waiting-company'?>> Wie kann sich sowas etablieren? *Kopf schüttelt***
Du zahlen + Sie haben Geld = beide freuen sich... naja...
Das mit 30min ist ja bei dir noch "ok" (milde ausgedrückt) ich habe eine
Standleitung und durch meine feste IP darf ich erst nach 24 Stunden
wieder etwas von rs ziehen... Lächerlich sowas. Für normales ISDN bzw.
DSL gibt es ja Tools zwecks "Connect+Disconnect vorgaukelei" dann geht
das sofort wieder.
Kenne leider sonst keine Möglichkeit wo ich das sonst Hochladen könnte.
Habe leider kein Webserver...
Warst du denn nun erfolgreich mit dem Download ? :)
Gruß
Jobst M. schrieb:> Mein Gott, jetzt hat er's ...
Irgendwann klappt es doch :)
Jobst M. schrieb:> Ja, chic :-)
Ich finde es auch sehr toll! ;) und man sieht ja eindeutig die
unterschiede zwischen Transistor und µC Version.
Sodele, nachdem ich ja leider nur den ATmega168 rumliegen hatte und der
mir später zwecks Portpins nicht ausreichen würde, verwende ich einfach
den ATmega16.
Was mich interessien würde ob ich denn eine art Mustertabelle (in deinem
tollen Programm ;)) erstellen kann in dem ich eben komplett PORTA PORTB
PORTC PORTD als 1, 2, 3 und 4 Spalte definieren kann und darunter eben
binär oder als hex hinterlegt habe welcher Pin, High oder Low sein soll.
(Denke mal nicht da ich .asm als "Schritt für Schritt" Variante kenne
:/)
Ich habe schon bisschen herumgesucht und hatte sehr oft den Befehl .db
entdeckt.
Wie gehe ich denn am besten vor ?
Mich interessiert ganz einfach ob ich denn damit dann alle Ports
beeinflussen kann oder nicht ? Wäre jedenfalls der Gedankengang korrekt
?
Beispielsweise:
Aufruf erfolgt dann im loop.
xx Muster xx
Pascal K. schrieb:> Sodele, nachdem ich ja leider nur den ATmega168 rumliegen hatte und der> mir später zwecks Portpins nicht ausreichen würde, verwende ich einfach> den ATmega16.
Wie viele LEDs willst Du denn ansteuern?
21 schaffst Du mit dem 'kleinen' ohne weiteres.
Pascal K. schrieb:> Denke mal nicht
Falsch gedacht. Setz das 'INC muster' wieder an die alte Position. Nun
hast Du einen Zeiger auf Deine Tabelle, den Du nur noch auf 10 begrenzen
mußt.
Also ein 'Wenn muster>9, dann muster=0'
Die Tabelle sollte dann geschickter Weise nicht auch noch Muster heißen
...
Sollte mit der Tabelle mit ein paar Befehlen erledigt sein:
1
INC muster ; Nächstes Muster
2
cpi muster, 10 ; Mit 10 vergleichen
3
brsh 1 ; Einen Befehl überspringen solange nicht 10
4
clr muster ; Wenn 10, dann 0
5
6
clr temp
7
ldi ZL, LOW(Mustertable*2)
8
ldi ZH, HIGH(Mustertable*2)
9
ADD ZL, muster
10
ADC ZH, temp
11
LPM temp, Z
12
OUT PORTC, temp
Ach ja: Die meisten AVR Assembler erwarten immer eine gerade Anzahl an
Bytes in Datenfeldern, sonst wird ein Leerbyte angehängt.
Also die Bytes verpaaren - oder alle in eine .db Zeile ...
Dir ist bei Deinen Mustern schon aufgefallen, daß eine LED ständig
leuchtet, andere dafür nur 1 oder 2 Mal?
Gruß
Jobst
Servus. Ohje schon wieder so spät...arbeite eindeutig zu lange :).
Jobst M. schrieb:> Wie viele LEDs willst Du denn ansteuern?> 21 schaffst Du mit dem 'kleinen' ohne weiteres.
Da der Tisch später ein 5x5 großes Feld hat, sprich 25. Bräuchte ich
eben 25 Pins als Ausgänge. Je nach LED Auswahl (zwecks Ausleuchtung der
Felder etc) pro Pin 2-4 LEDs.
Jobst M. schrieb:> Falsch gedacht. Setz das 'INC muster' wieder an die alte Position. Nun> hast Du einen Zeiger auf Deine Tabelle, den Du nur noch auf 10 begrenzen> mußt.> Also ein 'Wenn muster>9, dann muster=0'>> Die Tabelle sollte dann geschickter Weise nicht auch noch Muster heißen> ...> Sollte mit der Tabelle mit ein paar Befehlen erledigt sein:
Ok, dann habe ich eindeutig falsch gedacht. Ist dann ja theoretisch wie
ein Uhrzeiger. Beim "Signal" zeigt der Zeiger auf das nächste Muster.
Beim letzten Muster springt er wieder an den Anfang.
Es müsste doch auch möglich sein mehrere Zeiger mit einem
"Ausgangspunkt" (in meinem Fall dem Bassignal) zu verknüpfen ?
Wenn ich PORTA - PORTD in 4 Zeigerdiagramme seperate Muster ausgeben
möchte, sollte es doch möglich sein, mit einer art Unterprogrammaufruf
alle gleichzeitig abzufragen ? (Irgendwie kann ich das grad nicht
richtig erklären wie ich das meine). Evtl mit Code unten besser.
Ich müsste mich da eh noch etwas einlesen in diesen Zeigerablauf und ob
man evtl mit einem Z-Pointer auf mehrere Tabellen schauen kann.
Bitte nicht erschrecken :). Entweder das geht überhaupt nicht oder es
wäre von Hinten durch den Kopf programmieren :).
1
INC muster ; Nächstes Muster
2
cpi muster, 10 ; Mit 10 vergleichen
3
brsh 1 ; Einen Befehl überspringen solange nicht 10
4
clr muster ; Wenn 10, dann 0
5
6
clr temp
7
(hier in die zweite Table springen oder keinerlei Aufruf und Z-Pointer fragt mehrere Tabellen ab?)
8
ldi ZL, LOW(MusterCtable*2, MusterAtable*2)
9
ldi ZH, HIGH(MusterCtable*2, MusterAtable*2))
10
ADD ZL, muster
11
ADC ZH, temp
12
LPM temp, Z
13
OUT PORTC, temp
14
15
MusterC:
16
.db 0b11000000 // 1 Muster
17
.db 0b11111001 // 2 Muster
18
.db 0b10100100 // 3 Muster
19
.db 0b10110000 // 4 Muster
20
.db 0b10011001 // 5 Muster
21
.db 0b10010010 // 6 Muster
22
.db 0b10000010 // 7 Muster
23
.db 0b11111000 // 8 Muster
24
.db 0b10000000 // 9 Muster
25
.db 0b10010000 // 10 Muster
26
27
MusterA:
28
.db 0b11000000 // 1 Muster
29
.db 0b11111001 // 2 Muster
30
.db 0b10100100 // 3 Muster
31
.db 0b10110000 // 4 Muster
32
.db 0b10011001 // 5 Muster
33
.db 0b10010010 // 6 Muster
34
.db 0b10000010 // 7 Muster
35
.db 0b11111000 // 8 Muster
36
.db 0b10000000 // 9 Muster
37
.db 0b10010000 // 10 Muster
Jobst M. schrieb:> Ach ja: Die meisten AVR Assembler erwarten immer eine gerade Anzahl an> Bytes in Datenfeldern, sonst wird ein Leerbyte angehängt.>> Also die Bytes verpaaren - oder alle in eine .db Zeile ...
Ja das hatte ich gelesen ist ja bedingt durch die 16Bit Organisation im
Flash Speicher. Und dann entweder eine 0 dran oder verpaaren oder .db.
Jobst M. schrieb:> Dir ist bei Deinen Mustern schon aufgefallen, daß eine LED ständig> leuchtet, andere dafür nur 1 oder 2 Mal?
xD ja, aber hatte nur mal als Beispiel eine 7-Segment Anzeige genommen.
Gruß!
Was hältst Du davon, die Muster für die verschiedenen Ports
hintereinander in einer Datenzeile zu halten und dann sowas zu
machen.(s.u.) Dann lädst Du die Muster-Basis-Adresse in Z nur, wenn
muster auf 0 gesetzt wird - aber bastel mal selber :-)
LPM temp, Z+
OUT PORTC, temp
LPM temp, Z+
OUT PORTA, temp
Pascal K. schrieb:> (hier in die zweite Table springen oder keinerlei Aufruf und Z-Pointer fragt
mehrere Tabellen ab?)
> ldi ZL, LOW(MusterCtable*2, MusterAtable*2)
Nö. Musst Du nacheinander machen.
Gruß
Jobst
Jobst M. schrieb:> Muster für die verschiedenen Ports> hintereinander in einer Datenzeile zu halten
Genau so hatte ich es mir eigtl. auch gedacht :).
Dann werde ich mal schauen was ich in den nächsten Stunden und Tagen
zusammenbekomme! Danke schonmal!
Gruß
Pascal K. schrieb:> Genau so hatte ich es mir eigtl. auch gedacht :)
Dies
Pascal K. schrieb:> MusterC:> .db 0b11000000 // 1 Muster> :> .db 0b10010000 // 10 Muster>> MusterA:> .db 0b11000000 // 1 Muster> :
sieht aber nicht danach aus ... ;-)
Schauen wir mal ...
Gruß
Jobst
Haha Jobst :D, das da oben sollte es auch garnicht sein. Hatte mir mal
vor längerem etwas überlegt nur ob das dann so im .asm geht weiß ich
eben nicht.
Let me try it out! yeah ;)
Habe manchmal wenn ich schreibe noch tausend andere Ideen im Kopf :D
Sodele,
nunja bin grad etwas im Streß und habe mir erstmal ein Grundgerüst des
Codes für den späteren ATmega16 erstellt. Wahrscheinlich schlagst du dir
(Jobst) die Hände über dem Kopf zusammen wenn du es siehst. Aber mühsam
ernährt sich das Eichhörnchen und irgendwie werde ich das Kind schon
schaukeln. :)
Hatte jetzt leider auch noch nicht die Zeit wirklich daran zu basteln
und zu testen. (Wenn man um 21-22 Uhr von der Arbeit kommt hat das glaub
niemand).
Des Weiteren habe ich noch etwas Material bestellt. Sprich den ATmega16,
paar LEDs (normale 5mm rot), Experimentierplatinen, BC337 und
Lochraster. Möchte dann erstmal eine kleine Matrix aufbauen. Also 25
LEDs auf einer Lochraster dann kann ich herumprobieren zwecks der
Ausgabe bzw. Anzeige und somit besser die Muster erstellen.
Anbei mal das Grundgerüst des Codes. Es ging zwar zu Compilieren nur ich
selbst habe es noch nicht Debugged und es wäre ja schön wenn es so
einfach wäre :).
Gruß und Gute Nacht!
Guten Abend :)
Jobst M. schrieb:> Moin!> IN temp, PIND0> ANDI temp, 1>> PIND0 ?> Überleg mal, was die zweite Zeile tut.
ANDI temp, 1 : Habs mir nochmal angeschaut und wenn ich das nun richtig
verstehe, verändere ich mit ANDI sozusagen das 1-Bit (PIND0) und lasse
die anderen unberührt ?
Jobst M. schrieb:> Was wird auf Port A ausgegeben?
Hatte das gestern noch gemerkt dass das so nicht stimmt, so soll es
sein:
1
LPM temp, Z+
2
OUT PORTA, temp
3
LPM temp, Z+
4
OUT PORTB, temp
5
LPM temp, Z+
6
OUT PORTC, temp
7
LPM temp, Z+
8
OUT PORTD, temp
9
CALL WAIT_100ms ; warten
Jobst M. schrieb:> Falls Z mal 'entgleisen' sollte oder Du einen Fehler in den Datenreihen> hast: ANDI temp, 127> OUT PORTD, temp
Wieso 127 ? Verstehe ich jetzt nicht was man mit 127 angibt ?
Jobst M. schrieb:> Das kannst Du so machen, wenn Du auch den Z-Pointer nur einmal setzt.> Das machst Du aber nicht.
Das muss ich noch herausfinden wie man das dann macht :).
Mustertabelle nur mal etwas "einfaches" auf die schnelle. Naja, wie ich
eben alle Muster zusammenpacke, daran arbeite ich noch (wenn ich mal
wieder Zeit habe...)
Jedenfalls kam schon meine Hardware für die kleine Testmatrix.
Gruß und Gut's Nächtle Pascal!
> Falls Z mal 'entgleisen' sollte oder Du einen Fehler in den Datenreihen> hast: ANDI temp, 127> OUT PORTD, temp
Wieso 127 ? Verstehe ich jetzt nicht was man mit 127 angibt ?
Hm... also 127 wären ja 0b0111 1111 also die unteren 7 Bits von PORTD.
Müsste das aber nicht 254 sein 0b1111 1110, wegen dem Signaleingang an
PORTD ?
Gruß
Pascal K. schrieb:> Müsste das aber nicht 254 sein 0b1111 1110, wegen dem Signaleingang an> PORTD ?
Ja, korrekt - ich hatte es verdreht ...
Aber Du bist ja auch selber drauf gekommen ;-)
Pascal K. schrieb:> verändere ich mit ANDI sozusagen das 1-Bit (PIND0) und lasse> die anderen unberührt ?
Nein, Du liest ja von Port D. Da passiert etwas anderes.
Gruß
Jobst
So habe nun erstmal den Schaltplan an einen ATmega16 angepasst.
PORTB soll nur für die ISP Schnittstelle dienen, erstmal nur der
Musiksignaleingang und ein LED-Ausgang (damit ich auf 25 komme). Evtl.
nutze ich die zwei letzten PORTB freien PINS für später eine Musterwahl
falls mal die Musik aus ist oder zum umschalten zwischen Musikmodus und
eben "Durchlaufmodus/Demomodus".
Die ISP Pins werden erstmal nicht doppelt belegt.
PORTA, PORTC und PORTD sind pro PIN (1 LED) für die anderen 24 LEDs.
---
Das teilweise schon "Endprogramm" habe ich nun erstmal abgewandelt für
PORTB. Hoffe mal das würde soweit stimmen.
Jobst M. schrieb:> Das kannst Du so machen, wenn Du auch den Z-Pointer nur einmal setzt.> Das machst Du aber nicht.
Wie das geht, weiß ich noch nicht das wird sicherlich für mich am
kniffeligsten zwecks dem richtigen Code bzw. Befehle verwenden.
Habe auch mal verschiedene Muster in die Tabelle geschrieben. Natürlich
muss ich erst noch die kleine Matrix fertig löten, die auch schon fast
fertig ist.
Jobst M. schrieb:> IN temp, PIND0> ANDI temp, 1
So ich probiers nochmal...
IN temp, PIND -> Daten/Status von "PIND" in's temp laden
ANDI temp, 1 -> Isoliert das 1 Bit im Temp ? :X
Gruß Pascal