Hallo Leute,
ich habe ein kleines Problem mit zwei kleinen Programmen auf einem
Atmega 8.
Es geht um eine Comming Home Funktion und eine Innerraumlichtdimmung
fürs Auto.
Ich habe dafür jeweils ein Programm geschrieben. Erst das eine auf den
µC geflasht, getestet auf dem Steckbrett --> geht.
Dann das andere geschrieben, wieder getestet --> geht.
Jetzt möchte ich beide Programme auf einen µC machen und muss
feststellen, das es überhaupt nicht funktioniert.
Bin so vorgegangen:
Standartzeugs (crystal, ....)
Defintionen der Parameter (habe darauf geachtet, das keine der beiden
Programme ein Pin benutzt, welcher von dem anderen Programm gebraucht
wird.)
Do
Programm 1
Programm 2
Loop
End
--> geht nicht
Habe es dann mit dem Debounce Befehl probiert.
Standartzeugs
Definitionen
Do
Debounce , 1 , Comminghome , Sub
Debounce , 1 , Dimmer, Sub
Loop
End
Comminghome:
Programm 1
Return
Dimmer:
Programm 2
Return
--> funktioniert ebenfalls nicht.
Was habe ich da falsch gemacht?
Danke für eure Bemühungen.
Zippo schrieb:
> (habe darauf geachtet, das keine der beiden> Programme ein Pin benutzt, welcher von dem anderen Programm gebraucht> wird.)
Das einfachste wäre wenn die beiden "Programme" überhaupt keine
gemeinsamen Variablen oder uC-Resourcen benutzen.
Die Kristallkugel (sie ist wieder zurück vom polieren) sagt: Zeile 42.
Ist immer eine bischen zu Sarkasmus geneigt, das dumme Ding. ;-)
Hallo,
danke für deine schnelle Antwort.
Grrrr schrieb:
> Das einfachste wäre wenn die beiden "Programme" überhaupt keine> gemeinsamen Variablen oder uC-Resourcen benutzen.
ja das wäre wirklich das einfachste, geht aber leider nicht.
Grrrr schrieb:
> Die Kristallkugel (sie ist wieder zurück vom polieren) sagt: Zeile 42.> Ist immer eine bischen zu Sarkasmus geneigt, das dumme Ding. ;-)
Was meinst du mit Zeile 42? Auf welche Zeile bezieht sich der Sarkasmus
deiner Kugel :-) ? Ich weiß ja nicht wo du angefangen hast zu zählen,
oder was du alle mitgezählt hast.
Hallo,
ohne etwas mehr (genaueren) Code wird kaum eine Diagnose möglich sein.
Poste mal den kompletten Code (bzw. beide Codes).
Und bitte als Datei-Anhänge ...
Zippo schrieb:
> ja das wäre wirklich das einfachste, geht aber leider nicht.
Dann ist es wahrscheinlich, das sich die beiden in's Gehege kommen.
Untersuch doch mal, was konkret schiefläuft.
> Was meinst du mit Zeile 42? Auf welche Zeile bezieht sich der Sarkasmus> deiner Kugel :-)
Auf Zeile 42.
> Ich weiß ja nicht wo du angefangen hast zu zählen,> oder was du alle mitgezählt hast.
Das Übliche. Man fängt oben an. Die erste Zeile ist die Nummer 1. Dann
bei jedem Zeilenvorschub eins addieren.
Das soll heissen, dass Du den Quellcode posten sollst, Mensch. ;-)
Zippo schrieb:
> Hier sind die beiden Codes.
Seufz.
Poste den Code der nicht funktioniert! Du sagst ja selbst, das die
einzelnen Programme funktionieren, die Vereinigung der Codes aber nicht
funktioniert.
Du hast z.B. zwei Endlosschleifen in den einzelnen Codes. Wie hast Du
die verändert damit auch die jeweils andere Schleife mal drankommt?
Grrrr schrieb:
> Zwei Labels hintereinander ohne Return dazwischen. Dahinter Code der nie> drankommt!
Ok, aber was heißt das jetzt konkret für mich?
Ich habe doch zwei Returns zwischen drin, hinter jeder Subroutine eins.
Was muss ich ändern damit beide Codes ohne gegenseitige Behinderungen
laufen?
Zippo schrieb:
> Ich habe doch zwei Returns zwischen drin
Die Anzahl alleine machts nicht.
Zippo schrieb:
> hinter jeder Subroutine eins.
Umgekehrt wird ein Schuh daraus. Die Subroutine endet da wo das Return
steht.
Du hast eine Folge von:
Label1
Label2
return
blabla
return
Überleg mal welches Return ausgeführt wird, wenn Du gosub Label1 und
gosub Label2 ausführst.
Grrrr schrieb:
> Überleg mal welches Return ausgeführt wird, wenn Du gosub Label1 und> gosub Label2 ausführst.
Die korrekte Antwort lautet: Ach je! Kaum macht man's richtig, geht's.
;-)
Grrrr schrieb:
> Überleg mal welches Return ausgeführt wird, wenn Du gosub Label1 und> gosub Label2 ausführst.
Ok, das ist die Theorie. Ich habe jetzt hinter jede Subroutine ein
Return geschrieben. Aber es passiert absolut nicht das, was eigentlich
passieren sollte. Ich steh komplett auf dem Schlauch. Wie würdest du
denn das Programm schreben? Es stehen dir ja beide Programme zur
Verfügung, die ich laufen lassen will. Wie würdest du daraus jetzt ein
ganzes machen? Eventuell könntest du es posten, mir fällt sowas immer
leichter wenn ich es vor mir sehe. Ich wäre dir dafür echt dankbar. Habe
es gerade nochmal probiert, mit den Returns an anderer Stelle, aber
leider auch ohne Erfolg.
Zippo schrieb:
> Aber es passiert absolut nicht das, was eigentlich passieren sollte.
Dann sage mal genau, was PASSIEREN SOLL (das konnte ich in keinem Post
finden) und was bei dir PASSIERT. Dann kann man sich auch ein Bild davon
machen (und die Funktion der Software überprüfen).
Zippo schrieb:
> Ok, das ist die Theorie.
Mit eminenten Auswirkungen auf die Praxis.
> Ich habe jetzt hinter jede Subroutine ein> Return geschrieben.
Und wie sieht der Code jetzt aus? Was passiert?
Zippo schrieb:
> aber> leider auch ohne Erfolg.
Du musst schon selbst das Problem analysieren. Wir helfen Dir hier Dir
selbst zu helfen.
Ansonsten kannst Du mich für 60€/Stunde "mieten".
AVRuser schrieb:
> Dann sage mal genau, was PASSIEREN SOLL
Es sollen nur Programm 1 und Programm 2 laufen und auf Zustansänderungen
an den Eingängen PINB.0 und PIND.7 reagieren. Der Wert W kommt von einem
Fotowiderstand via ADC eingelesen. Die Lichter des Autos sollen ja nur
angehen, wenn es draußen dunkel ist.
Mit dem aktuellen Code, gehen beide LEDs an, bleiben an, egal was man an
den Eingängen passiert.
Zippo schrieb:
> Es sollen nur Programm 1 und Programm 2 laufen und auf Zustansänderungen> an den Eingängen PINB.0 und PIND.7 reagieren. Der Wert W kommt von einem> Fotowiderstand via ADC eingelesen. Die Lichter des Autos sollen ja nur> angehen, wenn es draußen dunkel ist.
Gut. Jetzt noch eine Beschreibung auf welche Weise jede Zeile des
Programmes das erreichen soll.
Grrrr schrieb:
> Gut. Jetzt noch eine Beschreibung auf welche Weise jede Zeile des
Genau jetzt klemmts bei mir.
Wie meisnt du das mit "jede Zeile"? Ich sehe die beiden einzelnen
Programme nicht als Zeilen, sondern jedes Programm als eine Einheit.
Im aktuellen Code soll das Hauptprogramm die beiden Eingänge abfragen
und die Subroutinen abrufen und ablaufen lassen.
Dann setz Dich zur Hoelle hin und versuche, nachzuvollziehen, was dein
Programm macht. Zeile fuer Zeile. Wenn Du das nicht hinkriegst, musst Du
halt jemanden bezahlen, der es macht.
Gast
cvnc schrieb:
> Dann setz Dich zur Hoelle hin und versuche, nachzuvollziehen, was dein> Programm macht. Zeile fuer Zeile. Wenn Du das nicht hinkriegst, musst Du> halt jemanden bezahlen, der es macht.
Ich denke nicht das solche Antworten Sinn eines Forums sind.
Wenn du etwas zu besten geben willst, dann doch bitte etwas was
weiterhilft.
Wenn du das nicht kannst, dann lies aufmerksam mit und lerne.
Die Frage ist einfach: Was heist es wenn Du sagst, es geht nicht!
Das überprüfst Du dann anhand dessen was Du annimmst, was geschehen
soll. Dein Design.
Das Design überprüfst Du dann anhand dessen was Du geschrieben hast.
Dein Programmcode.
Ob Du Deine Zeilen jetzt als ein Programm betrachtest oder nicht ist dem
Compiler und der Realität völig wurscht.
Du solltest Dich nach dem richten was "ist" und nicht nach dem "wie Du
es gerne hättest". Das nennt man Wertestarrheit und ist ein Problem mit
dem alle Programmierer mehr oder weniger zu kämpfen haben. Es blockiert
einen nämlich bei der Lösungsfindung.
Diese Hürde musst Du überspringen oder umgehen oder in die Luft sprengen
oder Du kannst das programmieren gleich ganz sein lassen. Im täglichen
Leben allerdings taucht das Problem auch auf.
Wir lassen es einfach nicht zu, das Du Probleme die Du nicht lösen
kannst, auf andere abwälzt. Wir helfen Dir hier freiwillig und
kostenlos. Aber Hilfe heisst nicht das wir "es" für Dich tun, sondern
das wir Dir helfen es selbst zu tun.
Und jetzt halte ich mich raus.
moin
Du hast den Stack nicht definiert , sollte man schleunigst nachholen.
$regfile = "m8def.dat"
$crystal = 10000000
$hwstack = 64
$swstack = 64
$framesize = 64
Und vielleicht mal die Hilfe von Bascom bemühen :-)
auf der Website von MCS gibts auf alle Fragen eine Antwort .....
mfg
Setze mal diese Zeilen rein:
Debounce Pind.7 , 0 , Ch , Sub
Debounce Pinb.0 , 0 , Pwm , Sub
Wenn Du in die Tasten haust, springt er zur jeweiligen Subroutine.
MfG Paul
Ich würde mal sagen, "ch" und "pwm" müssen immer, d.h. ohne debounce
aufgerufen werden.
Wenigstens wird in "pwm" Pinb.0 auf 0 und auf 1 abgefragt.
cu
Georg
Auch ist die Idee des
'Ich habe da ein Programm A geschrieben und ich habe ein Programm B
geschrieben und jetzt klotz ich die irgendwie in ein gemeinsames
Programm' nicht zielführend.
Du hast ein Programm A geschrieben. Gut.
Das basiert auf einer Idee, einer Vorgehensweise wie ein bestimmtes
Problem gelöst wird.
Weiters hast du ein anderes Programm B geschrieben.
Auch das basiert auf einer Idee.
Was du tun musst: Du musst ein Programm C schreiben, bei dem du die Idee
aus A und B in ein neues gemeinsames Programm integrierst. Du übernimmst
also nicht direkt einfach nur den Programmcode von A und B in einer 1:1
Manier, sondern du musst die beiden Programmideen in ein Programm
zusammenführen. Natürgemäss werden dabei wesentliche Teile in C wie der
Code in A oder B aussehen. Aber das hat keine Proiorität! Es ist nicht
wichtig, dass der Code 100% identisch ist. Es ist nur wichtig, dass du
die Programmideen zusammenführst. Und egal welche Anpassungen dazu
notwendig sind, sie sind notwendig.
Eine Aussage, wie die hier:
>> Das einfachste wäre wenn die beiden "Programme" überhaupt keine>> gemeinsamen Variablen oder uC-Resourcen benutzen.>> ja das wäre wirklich das einfachste, geht aber leider nicht.
muss für dich völlig inakzeptabel sein. Wenn Anpassungen notwendig sind,
dann sind sie notwendig. Wenn, abgesehen vom Kern der die Idee
implementiert, das Drumherum geändert werden muss, dann muss es geändert
werden.
Kleb nicht daran, dass du einfach 2 beliebige Programme in eine
gemeinsame Datei kopieren kannst, noch ein wenig Drumherum und schon
funktioniert alles. Das tut es nämlich nicht! Genau das hast du jetzt am
eigenen Leib erfahren.
Die beste Strategie besteht darin, sich daran zu erinner, welche Idee im
Code A steckt, welche Idee hinter Code B steckt, zu rekapitulieren wie
das alles realisiert wurde und dann A und B beiseite zu legen und mit
einem Programm C anzufangen, welches ein komplett neues Programm
darstellt. Da du A und B selber geschrieben hast und die Idee dahinter
auch noch kennst, geht das ruckzuck, sobald du weißt wie du beide Ideen
in einem Programm unter einen Hut bringen kannst.