Ich habe mal meinen Erstversuch in Assembler angehangen. Diese Stück Programm möchte ich in das Programm "DCC-Decoder" von Maddax aus dem Forum Codesammlung einfügen. Hintergrund: Dort ist kein Gleichspannungsbetrieb vorgesehen. Erklärung: Im dortigen Programm wird ein DCC-Signal an PB2 mittels Interrupt ausgewertet. Wenn aber kein DCC-Signal anliegt, da Gleichspannungsbetrieb passiert nichts. Mein beigefügtes Programm funktioniert (jedenfalls als Simulation mit AVR-Studio) ;-) Es gibt nun 3 Möglichkeiten des Signals an PB2: DCC - Signal Statischer H-Pegel Statischer L-Pegel Frage: Mit welchem ASM-Befehl kann ich abfragen, ob KEIN DCC-Signal an PB2 anliegt und darauf hin mein Programmstück anspringen? Mit seinem ASM-Latein am Ende Paul :-)
Paul Baumann wrote: > Ich habe mal meinen Erstversuch in Assembler angehangen. Diese Stück > Programm möchte ich in das Programm "DCC-Decoder" von Maddax aus dem > Forum > Codesammlung einfügen. Hintergrund: Dort ist kein Gleichspannungsbetrieb > vorgesehen. Ich habe mir das Projekt (noch) nicht näher angesehen, kenne also das Programm nicht. Habe vorläufig auch keine Zeit dazu. > Erklärung: Im dortigen Programm wird ein DCC-Signal an PB2 mittels > Interrupt ausgewertet. Wenn aber kein DCC-Signal anliegt, da > Gleichspannungsbetrieb passiert nichts. > > Mein beigefügtes Programm funktioniert (jedenfalls als Simulation mit > AVR-Studio) ;-) > Du möchtest also Deine H-Brücke (in Abhängigkeit von der Polung der Gleichspannung vor dem Gleichrichter) umschalten, um vorwärts und rückwärts fahren zu können, wenn kein DCC-Signal anliegt. > Es gibt nun 3 Möglichkeiten des Signals an PB2: > DCC - Signal > Statischer H-Pegel > Statischer L-Pegel > Wobei DCC-Signal aus Sicht des (schnellen) AVRs auch erstmal ein statisches Signal ist. ;-) > Frage: Mit welchem ASM-Befehl kann ich abfragen, ob KEIN DCC-Signal an > PB2 anliegt und darauf hin mein Programmstück anspringen? Dazu reicht kein "ASM-Befehl"... Du bräuchtest dazu einen Timeaut, der bei jedem ext. Interrupt (Pegelwechsel, DCC-Signal) wieder auf Startwert gesetzt wird und bei Ausbleiben der Pegelwechsel abläuft und auf Deine Routine verzweigt. Die Zeitkonstante sollte auch ein "stretched 0 bit" akzeptieren, um NMRA 9.1 konform zu sein. Jeder erneut auftretende Pegelwechsel muss diesen "Gleichstrom-Modus" sofort deaktivieren und, falls er aktiv war (aber auch nur dann!) die Brücke deaktivieren, bevor die DCC-Routine die Brücke wieder bedienen darf. Dazu ist die Sicherung über ein Flag erforderlich, das aussagt, ob der Gleichstrom-Mode aktiv ist). Weiterhin wird ein Timer als Timeout für das ausbleibende DCC-Signal gebraucht. Dies kann ein Zählregister sein, falls im Programm ein Timer-Interrupt durchläuft. Falls kein Timer diese Arbeit mitmachen kann, könnte man den ADC als Timer missbrauchen. Auf alle Fälle ist davon auszugehen, dass diese Erweiterung sehr eng mit dem bereits existierenden Programm verzahnt werden muss, für eine eigenständige Lösung reichen vermutlich die noch freien Ressourcen nicht aus. Aber wie gesagt, ich kenne das Programm nicht. Und nur mal kurz reinschaun (ohne es komplett zu analysieren) bringt auch nicht viel Übersicht, da muss man sich schon intensiv mit beschäftigen. Das ist eben einer der Nachteile von ASM. > > Mit seinem ASM-Latein am Ende > Paul :-) Beste Grüße, Hannes, der Dich nicht fragt, warum Du das nicht mit BASCOM machst... ;-)
Guten Morgen Paul, ich kann Dir zwar nicht auf der elektrischen Seite helfen(wie ist DCC definiert) aber zum Programm hätte ich einige Anmerkungen. Allerdings schreibe ich hier aus dem Kopf, deshalb keine Garantie, doch vom Prinzip dürfte es so funktionieren. Du willst: 1. den Port einlesen -> in R28, Portb ;ist ok 2. wenn Bit 2 gesetzt ist was tun -> SBIS R28,2 ;Skip if Bit in I/O Register is Set (überspinge nächsten Befehl wenn Bit 2 gesetzt ) -> rjmp Bit_2_not_set ;jetzt die Befehle für Bit_2 = 1 nop nop rjmp Bit_eval_ok ;nun Auswertung für Bit_2 = 0 Bit_2_not_set: nop nop rjmp Bit_eval_ok So würde ich die Auswertung vornehmen. Wahrscheinlich bin ich zu spät, da hier nebenbei noch gearbeitet wird. Gruß Stevko ;und weiter im Programm Bit_eval_ok: nop nop .......
Mist da ist was Durcheinander vom Kopieren. Hier die richtige? Fassung! Guten Morgen Paul, ich kann Dir zwar nicht auf der elektrischen Seite helfen(wie ist DCC definiert) aber zum Programm hätte ich einige Anmerkungen. Allerdings schreibe ich hier aus dem Kopf, deshalb keine Garantie, doch vom Prinzip dürfte es so funktionieren. Du willst: 1. den Port einlesen -> in R28, Portb ;ist ok 2. wenn Bit 2 gesetzt ist was tun -> SBIS R28,2 ;Skip if Bit in I/O Register is Set (überspinge nächsten Befehl wenn Bit 2 gesetzt ) -> rjmp Bit_2_not_set ;jetzt die Befehle für Bit_2 = 1 nop nop rjmp Bit_eval_ok ;nun Auswertung für Bit_2 = 0 Bit_2_not_set: nop nop rjmp Bit_eval_ok ;und weiter im Programm Bit_eval_ok: nop nop ....... So würde ich die Auswertung vornehmen. Wahrscheinlich bin ich zu spät, da hier nebenbei noch gearbeitet wird. Gruß Stevko
@Hannes Zitat: >der Dich nicht fragt, warum Du das nicht mit BASCOM machst... ;-) Das habe ich kommen sehen. ;-) Ich hatte das ganze Programm tatsächlich schon mal mit $asm in Bascom eingefügt und wollte meine Routine mit Bascom-Quelltext dazuschreiben. Aber der Compiler hat das nicht mehr verkraftet; es wurde zu groß. :-( Da muß ich mal ein wenig weiter experimentieren. Deine Überlegungen helfen mir dabei sehr. @Stevko Deine Lösungsmöglichkeit ist auch interessant. Ich habe bisher noch nichts mit Assembler gemacht, (bin eigentlich Bascom-Fan) und habe länger dazu gebraucht, mir die entsprechenden Befehle zu suchen und zu verstehen, als alles wert war. ;-) SBIS ist ein schönes Ding. MfG Paul
@Paul Ich bin zwar nur stiller Mitleser doch Paul Baumann = Bascom war in meinem Hinterkopf. Noch einen Tip für den Anfang: In dem Atmel-Verzeichnis für das AVR-Studio gibt es eine Hilfedatei(AVRASM.chm) für Assembler. Bei mir ist es in: "D:\Programme\Atmel\AVR Tools\Help\AVRASM.chm". Dort auf den Reiter "Index" klicken und schon hast Du alle ASM-Befehle und die nötigen Erklärungen. Hat mir am Anfang sehr geholfen. Gruß Stevko
Paul, meine Betonung lag auch auf "nicht" (ich frage also nicht)... ;-) Noch'n Hinweis: Wenn man in AVR-Studio den Textcursor im Editorfenster auf einem ASM-Befehl stehen hat, dann sollte man mal die F1-Taste drücken, falls man Informationen zum Befehl braucht. Ich habe den Quelltext mal kurz überflogen. Neben zwei Registern sind ja noch ein paar (als Flags nutzbare) Bits Bits im Register 'flagreg' frei. Ich konnte aber auf die Schnelle nicht zweifelsfrei feststellen, ob ein Timer ständig durchläuft und somit geeignet ist, den Timeout zu managen. Dumm ist auch, dass ich keine Modellbahn betreibe (ich habe zwar etwas TT-Zeugs herumliegen, aber nix Digitales), also auch keinerlei Motivation habe, den ultimativen DCC-Decoder zu entwickeln. Auch ist mir der Standard zu 'offen', man muss auf zuviele Dinge Rücksicht nehmen, die auf den ersten Blick irrelevant erscheinen. Ernst gemeintes Gedankenspiel: Hast Du Dir schonmal den Tiny25/45/85 angesehen? Der hat SRAM und ein paar Features mehr. Kann gut sein, dass Du die gesammte Aufgabe mit einer Hochsprache lösen kannst. ...
@Stevko Das ist ein guter Tip. Ich habe auch noch etwas Anderes gefunden: http://www.avr-asm-tutorial.net/ Das ist ganz prima, weil es in deutscher Sprache ist. Mit Englisch habe ich enorme Schwierigkeiten, weil ich schon so alt bin, daß es zu meiner Schulzeit noch gar keine Engländer gab. :-)) @Hannes Ich habe gesehen, daß Maddax dort die Register 28 und 29 noch frei hatte. Die Timer sind beide "voll im Streß". Er hat eine Routine "Ext_int0" drin, die den Flankenwechsel an PB2 auswertet. Da will ich "mit rein". Heute Abend versuche ich das mal. Jetzt habe ich 2 Loks fertig umgerüstet (BR80 von Piko und V60 von Gützold). Die laufen beide prima mit Eigenbaubooster und der Software "DDW-Server" und "Rayliplan" sowie "Rayliprog".Motivation ist bei mir: Kein Geld, um fertige Komponenten zu kaufen, dafür aber Zeit und eine einigermaßen gute Ausrüstung, um selbst zu bauen. Außerdem ist es auch ein Training für den Graukopf, sich vorsichtig an ASM heranzupirschen. Wahrscheinlich ginge es mit Bascom einfacher, aber ich müßte den ganzen Algorithmus "umstricken". Ich habe nur mal probeweise mit einem Attiny2313 eine Routine nur zum Auswerten des DCC-Signals auf 0 oder 1 gemacht, da war er voll und es ging nichts Anderes mehr rein. ;-) MfG Paul
Paul Baumann wrote u.a.: > @Hannes > Ich habe gesehen, daß Maddax dort die Register 28 und 29 noch frei > hatte. > Die Timer sind beide "voll im Streß". Er hat eine Routine "Ext_int0" > drin, > die den Flankenwechsel an PB2 auswertet. Da will ich "mit rein". Da musst Du rein, um den Timeout zu verhindern, also den Timeout-Zähler zurückzusetzen. Und da musst Du prüfen, ob der 'Gleichstrom-Mode' aktiv ist (dann hat die H-Brücke nämlich einen Zustand, von dem die DCC-Steuerung nichts weiß!) und, falls aktiv, die H-Brücke ausschalten und den Gleichstrom-Mode deaktivieren. War die Flanke DCC-bedingt, dann findet DCC eine stehende Lok vor und kann korrekt arbeiten. War die Flanke aber nur ein Gleichstrom-Richtungswechsel, dann schafft es der Timeout erneut, den Gleichstromm-Mode zu aktivieren, also das Gleichstrom-Flag (das Du in dem nicht vollen Flagregister anlegen musst) zu setzen und die pegelabhängige Fahrtrichtung zu setzen. Der Timeout muss von einem anderen 'Ereignis' heruntergezählt werden, das auch dann eintritt, wenn (aufgrund von Gleichstrom) keine Pegelwechsel mehr stattfinden, also von einem Timer (bzw. dessen zyklischen Interrupt), der auch dann läuft, wenn kein DCC-Signal mehr empfangen wird. Wenn der Timeout-Zähler abläuft (0 erreicht oder Unterlauf, was vermutlich in der Timer-ISR erfolgt), dann muss Deine Routine zum Setzen einer Fahrtrichtung aufgerufen werden und das 'Gleichstrom-Flag' in 'flagreg' gesetzt werden, damit beim nächsten Pegelwechsel die H-Brücke abgeschaltet wird um Kollisionen mit der DCC-Steuerung zu verhindern. > Heute Abend versuche ich das mal. Jetzt habe ich 2 Loks fertig > umgerüstet > (BR80 von Piko und V60 von Gützold). Die laufen beide prima mit > Eigenbaubooster und der Software "DDW-Server" und "Rayliplan" sowie > "Rayliprog".Motivation ist bei mir: Kein Geld, um fertige Komponenten zu > kaufen, dafür aber Zeit und eine einigermaßen gute > Ausrüstung, um selbst zu bauen. Außerdem ist es auch ein Training für > den Graukopf, sich vorsichtig an ASM heranzupirschen. Es ist ja auch ein schönes Hobby... Nur stehen die Modellbahner, denen ich gelegentlich etwas helfe, nicht auf Digital. Auch müssten die Lokdecoder und Booster sehr starke Endstufen haben. Einige Fotos dieser Modellbahner und ihrer Fahrzeuge findest Du auf http://www.gartenbahn.de.md > Wahrscheinlich > ginge es mit Bascom einfacher, aber ich müßte den ganzen Algorithmus > "umstricken". Vermutlich nicht, BASCOM macht zuviele unnötige Dinge in den Interrupt-Routinen und verschwendet dadurch die (beim Tiny15) eh schon knappe Rechenzeit. > Ich habe nur mal probeweise mit einem Attiny2313 > eine Routine nur zum Auswerten des DCC-Signals auf 0 oder 1 gemacht, da > war er voll und es ging nichts Anderes mehr rein. ;-) Ja richtig, es wird auch viel Code erzeugt, den niemand wirklich braucht. > > MfG Paul Gruß, Hannes
Das sind ja schöne Bilder auf der Seite. Naja, bei Gartenbahnfahrzeugen und deren Motoren käme ich mit meinem Booster wahrscheinlich nicht weit, wenn mehrere fahren sollten. Das Ding gibt etwas mehr als 4 Ampere her und ist kurzschlußfest. Ich habe mal versucht, Deine Tips in die Tat umzusetzen, aber einen derartigen Mumpitz erzeugt, daß jetzt weder das Eine noch das Andere geht. Ich fange nochmal neu an, den ganzen "Fromm`s" auf einem Blatt Papier auseinanderzuziehen, um zu sehen, woran es liegt. Ein Problem beim Simulieren mit AVR-Studio: Ein Programm beginnt ja immer von "ganz oben" aus zu laufen. Wie erzwinge ich einen Start "mittendrin" Hintergrund: Es ist ganz schwer, mittels Mausklicks ein DCC-Signal zu erzeugen und an PB2 "einzuspeisen" ;-) MfG Paul
Paul Baumann wrote: > Das sind ja schöne Bilder auf der Seite. Da hat meine einfache Digitalknipse (Fixfocus) von Kodak auch ganz schön arbeiten müssen. > Naja, bei Gartenbahnfahrzeugen > und deren Motoren käme ich mit meinem Booster wahrscheinlich nicht weit, > wenn mehrere fahren sollten. Das Ding gibt etwas mehr als 4 Ampere her > und > ist kurzschlußfest. > > Ich habe mal versucht, Deine Tips in die Tat umzusetzen, aber einen > derartigen Mumpitz erzeugt, daß jetzt weder das Eine noch das Andere > geht. Naja, das Projekt ist auch etwas komplex für den Einstieg... > Ich fange nochmal neu an, den ganzen "Fromm`s" auf einem Blatt > Papier > auseinanderzuziehen, um zu sehen, woran es liegt. > > Ein Problem beim Simulieren mit AVR-Studio: Ein Programm beginnt ja > immer von "ganz oben" aus zu laufen. Wie erzwinge ich einen Start > "mittendrin" Nur durch einen RJMP, den Du am Anfang (nach der Initialisierung) einfügst. Aber das brauchst Du nicht... > Hintergrund: Es ist ganz schwer, mittels Mausklicks ein DCC-Signal zu > erzeugen und an PB2 "einzuspeisen" ;-) Und genau dagegen ist auch ein Kraut gewachsen: Stimuli-Dateien... Du schreibst Dir mit einem Texteditor eine Textdatei (Liste), in der in jeder Zeile zwei Einträge sind, dazwischen ein Doppelpunkt. Der erste Eintrag ist die Nummer des Taktes, bei dem 'zugeschlagen' werden soll. Diese Zahl wird dezimal angegeben und darf maximal 9-stellig sein. Die Zahl hinter dem Doppelpunkt ist hexadezimal (aber ohne Präfix) zu notieren und gibt das Bitmuster an, das am Eingang (PINB) zu diesem Takt eingestellt wird. Diese Datei (mit der Endung '.sti') legst Du im Temp-Ordner Deines Rechners ab. Dann rufst Du bei aktivem Simulator Debug, Simulator-Optionen auf, wählst Logging und Stimuli, dann Stimuli an PortB und wählst die Datei aus. Und schon wird beim Simulieren beim jeweils angegebenen Takt das entsprechende Bit verändert. Mit einem Breakpunkt in der ISR des Int0 (F9-Taste) hältst Du das (mit F5 'Run' gestartete) Programm an und kannst dann mit F11 'Eintelschritt' weiter steppen. Somit kannst Du auch im Simulator ein exaktes Impulsmuster am Eingang abarbeiten. Einzelheiten (in Neudeutsch) findest Du unter Help/AVR-Studio, Suche nach 'stimuli'. > > MfG Paul Viel Erfolg... ...
@Hannes Das habe ich eben mal getestet. Geht wunderbar! Das wird mir helfen, meinen Unsinn zu durchschauen und zu sehen, wieso er in Routinen springt, die ich ihm gar nicht "gesagt" habe. ;-) (Ich weiß, daß das Problem VOR dem Rechner sitzt) :-) Jetzt muß ich erst mal meine alte Tastatur wieder dran machen, weil die hier nur bis F10 geht. Aber nun habe ich mir erst mal ein Bier verdient und Du auch! Leider kann ich Dir keins im Anhang schicken; meine Firewall läßt das nicht durch. :-) Schönen Abend noch Paul
Paul Baumann wrote: > @Hannes > Das habe ich eben mal getestet. Geht wunderbar! Leider habe ich Unsinn geschrieben, was die Menüpunkte betrifft, aber Du bist ja pfiffig und findest das auch so... ;-) > Das wird mir helfen, > meinen > Unsinn zu durchschauen und zu sehen, wieso er in Routinen springt, Ich habe Stimuli auch erst vor ein paar Tagen das erste mal eingesetzt. Es waren aber RC-Impulse (Funkfernsteuerung) für einen Gartenbahn Fahrtregler. > die > ich ihm gar nicht "gesagt" habe. ;-) (Ich weiß, daß das Problem VOR dem > Rechner sitzt) :-) Das Problem, ist eigentlich die ungewohnte Benutzeroberfläche. Ich konnte mich deshalb mit BASCOM nicht anfreunden obwohl ich BASIC kann (PC, C16). > Jetzt muß ich erst mal meine alte Tastatur wieder dran machen, weil die > hier nur bis F10 geht. Besser iss datt, Einzelschritt ist F11..... > Aber nun habe ich mir erst mal ein Bier verdient > und Du auch! Naja, datt muss nicht sein. Ich habe 10 Jahre lang Hopfengerüste gebaut, da ist mir nicht mehr nach Bier... ;-) > Leider kann ich Dir keins im Anhang schicken; meine > Firewall läßt das nicht durch. :-) Besser iss datt... > > Schönen Abend noch > Paul Ich habe nochmal kurz ins Programm reingeschaut und festgestellt, dass beide Timer ein- und ausgeschaltet werden. Sie sind also nicht oder nur bedingt für Timeout geeignet. Es sind auch nur noch 24 Bytes (12 Befehle) frei. Es wird also eng. Mir ist auch aufgefallen, dass der Oszillator gar nicht calibriert wird. Er rattert also nicht mit 1,6 MHz, sondern dümpelt je nach Exemplar mit 800 bis 1200 kHz vor sich hin. Schönen Abend noch und prost... ... P.S.: In welchem Landstrich bist Du eigentlich zu Hause?
Guten Morgen Hannes, ich habe die Sache mit den Stimuli auch so herausgekriegt. (Eine Suchmaschine hat mir geholfen) GRINS. Die Benutzeroberfläche von BASCOM ist mir auch lieber als dieses Studio, aber das ist sicher ein Gewöhnungseffekt. Zitat: >Naja, datt muss nicht sein. Ich habe 10 Jahre lang Hopfengerüste gebaut, da ist mir nicht mehr nach Bier... ;-) Na, dann ist ja bei Dir Hopfen und Malz verloren. ;-) Ich halte es da mit "Werner": Hau wech, die Sch...ße! Ja, Programmspeicher ist da nicht mehr üppig, ich würge noch daran herum. Aber der Oszillator ist kalibriert, denke ich. Weiter unten im EEPROM -Bereich hat er das Kalibrationsbyte abgelegt und man kann es später in Form eines CV-Wertes ändern, wenn der Ablauf nicht stimmt. Das aüßert sich in verschieden großen Geschwindigkeiten bei Vor/Rück oder gar nicht erst anfahren in eine Richtung. Schönen Gruß aus einer Stadt nordwestlich von Erfurt Paul
Paul Baumann wrote: > Guten Morgen Hannes, > ich habe die Sache mit den Stimuli auch so herausgekriegt. (Eine > Suchmaschine hat mir geholfen) GRINS. > > Die Benutzeroberfläche von BASCOM ist mir auch lieber als dieses Studio, > aber das ist sicher ein Gewöhnungseffekt. > > Zitat: >Naja, datt muss nicht sein. Ich habe 10 Jahre lang Hopfengerüste > gebaut, da ist mir nicht mehr nach Bier... ;-) > > Na, dann ist ja bei Dir Hopfen und Malz verloren. ;-) Das ist wohl wahr... > Ich halte es da mit "Werner": Hau wech, die Sch...ße! > > Ja, Programmspeicher ist da nicht mehr üppig, ich würge noch daran > herum. > Aber der Oszillator ist kalibriert, denke ich. Stimmt (habe jetzt nachgesehen), da war ich wohl doch zu voreilig. > Weiter unten im EEPROM > -Bereich hat er das Kalibrationsbyte abgelegt und man kann es später in > Form eines CV-Wertes ändern, wenn der Ablauf nicht stimmt. Das aüßert > sich in verschieden großen Geschwindigkeiten bei Vor/Rück oder gar nicht > erst anfahren in eine Richtung. Nunja, ich kenne das nicht mit "ausprobieren", sondern mit Auslesen aus dem Signature-Space und Ablegen in der letzten Flash- oder EEP-Zelle, also da, wo auch neue AVRs eine Kolie ihres exemplarabhängigen Calibrationsbytes haben. Lies mal einen werksneuen Tiny15 aus (Flash und EEP), dann weißt Du was ich meine. Ich kam nicht auf die Idee, dass man das über eine CV macht... ;-( > > Schönen Gruß aus einer Stadt nordwestlich von Erfurt Na dann wird's wohl nix mit'm Käffchen... Bin bei Magdeburg "vom Dorfe". > > Paul Gruß, Hannes
Hallo Paul, das mit dem Gleichspannungsbetrieb hab ich auch schon im Hinterkopf. Bis jetzt ist das immer dem Platz im Tiny15 Programmspeicher zum Opfer gefallen. Nächstes Problem, wenn Du es über den Atmel löst, brauchst Du mind. 7-8 Volt (1,4V Gleichrichter, 5V Atmel, Rest für den Stabi) auf dem Gleis bevor Du die H-Brücke ansteuern kannst. Anfahren könnte man über PWM lösen, aber anhalten ist dann schon sehr abrupt. Da bleibt dann nur wieder die H-Brücke über zusätzliche Widerstände vom Gleis immer voll durchzuschalten oder mit einem AD Wandler bei Analogbetrieb die Höhe der Gleisspannung zu überwachen. Ob DCC Befehle eintreffen, kannst Du übrigens auch schon bei Maddax seinem Code einfach mit Hilfe des Timer 0 auswerten. Ich hab mal ein Beispiel angehängt: ;************************************ ;* Timer_0_interrupt * ;************************************ ; wird ca 78us nach ext_int ausgelöst und liest dann bit von int0/d2 ein ; danach max 10000us auf neuen ext_int warten ; dazu teiler auf 1024 und zähler auf 255-79=176 TIM0_OVF: in intsreg,sreg ;sreg sichern clr inttemp ;timer anhalten out tccr0,inttemp in inttemp,pind ;port einlesen sbrs flag,messen ;wenn messen aktiv springen rjmp warten_aktiv ;sonst gehe zu com inttemp ;port umdrehen bst inttemp,2 ;bit d2 holen bld flag,bit ;und in flag bit0 sichern sbr flag,(1<<neuesbit) ;neues bit da setzen cbr flag,(1<<messen) ;flag für messen aus ldi inttemp,176 ;Zähler auf 176 out tcnt0,inttemp ldi inttemp,0b00000101 ;timer mit Teiler auf ck/1024 starten out tccr0,inttemp out sreg,intsreg reti warten_aktiv: ;ca 10000us kein bit mehr eingetroffen sbr flag,(1<<keinDCC) ;bit für keine befehle setzen out sreg,intsreg reti Gruß Willi
@Hannes Schade, da sind wir zu weit voneinander weg, um mal zusammen Kaffee zu trinken. Das ist bei den Spritpreisen nicht mehr machbar. :-( Für das "Anfertigen" von Stimulidateien habe ich hier: http://www.hot.ee/nppcsoftware/ ein schönes Ding gefunden. Das Kalibrationsbyte habe ich mal bei neuen Tiny15 mit Ponyprog ausgelesen. Bis jetzt brauchte ich das nicht, weil ich sonst immer Quarze an die anderen AVR´s drangemacht habe. Deine Idee ist gut, das Kalibrationsbyte automatisch zu lesen und dann dahin zu kopieren. Aber das Stück Programm dafür braucht auch wieder Platz und es ist schon alles so enge. @Willi Da hast Du Recht mit Deinen Überlegungen zur Spannung. Ich habe das eigentlich nur als "Notlösung" gedacht, wenn man mal bei jemandem Anderen auf der Gleichstromanlage zu Gast ist. Ich werde mal Deinen Programmvorschlag auf Port B ändern und mal sehen, ob ich das Ganze noch "hineinquetschen" kann. Wenn ich das richtig verstehe, müßte ich dann, wenn das Flag-Bit "Keine Befehle" auf 1 steht das ganze Flagregister mit andi verknüpfen um das Bit "keine Befehle" herauszufiltern und dann in mein Programm hineinzuhüpfen? Da bleibe ich dann drin bis zum Erbrechen, weil ja ohnehin kein DCC-Signal kommen kann. MfG Paul
Paul Baumann wrote: > Wenn ich das richtig verstehe, müßte ich dann, > wenn > das Flag-Bit "Keine Befehle" auf 1 steht das ganze Flagregister mit andi > verknüpfen Nein, damit änderst Du ja den Inhalt. > um das Bit "keine Befehle" herauszufiltern Dafür gibt es die Skip-Befehle. Das sind SBRS und SBRC (gibt's auch für I/O), die überspringen den folgenden RJMP, wenn das Bit gesetzt/gelöscht ist. > und dann in mein > Programm hineinzuhüpfen? Da bleibe ich dann drin bis zum Erbrechen, Da bleibst Du drin, bis zum nächsten Pegelwechsel am Eingang, denn sonst würde eine Wechselspannung (verstümmeltes DCC?) Deinen Motor grillen wollen. > weil > ja ohnehin kein DCC-Signal kommen kann. Das klappert aber schon einige male hinundher, ehe es als DCC decodiert ist, oder? > > MfG Paul Bitte nur als Denkanstöße werten. Ein "Dummer Hinweis" meiner Sorte kann möglicherweise Alternativen zeigen... ...
@Hannes
Oh weh, daß ich damit den Inhalt ändere, habe ich gerade gemerkt. SBIS
macht schon vernünftigere Sachen. Es klappert immerzu hin und her, WENN
ein
DCC-Signal anliegt aber bei Gleichspannung läuft der Timer 0 nur einmal
durch, dann merkt er, daß der Pegel gleich geblieben ist und springt in
"Warten aktiv". Da heraus muß ich jetzt in meine
"Gleichspannungsroutine"
hüpfen.
Ich arbeite an mir und dem Programm. :-)
>Zitat:Bitte nur als Denkanstöße werten. Ein "Dummer Hinweis" meiner Sorte kann
möglicherweise Alternativen zeigen...
Deine Hinweise fand ich gut, nicht nur hier. Das ist kein "Honig um´s
Maul
schmieren" , das meine ich so.
ldi Mund, Zigarette
rjmp Balkon
:-)
Paul
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.