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. ;-)
Grrrr schrieb:
> Das soll heissen, dass Du den Quellcode posten sollst, Mensch. ;-)
^^, ja hab das etwas spät gecheckt.
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?
Zwei Labels hintereinander ohne Return dazwischen. Dahinter Code der nie 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?
> Ich habe doch zwei Returns zwischen drin, hinter jeder Subroutine eins.
Die Sub "Ch" hat kein 'Return' ...
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.
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.