Hallo zusammen, Ich bin noch recht neu auf dem Gebiet Programmieren und habe daher vorab ein paar fragen, damit ich nicht gleich fehler bei meinem ersten Programm mache. Gegeben ist ein Atmega32 welchen ich mit assambler programmieren soll. Die aufgabe besteht darin einen Ausgang zu schalten welcher immer im gleichen Abstand ein High- und Low-Signal ausgibt. Diese Zeit sollte in gewisser m´ßen einstellbar sein. gegeben sind 1min ein/aus, 2min ein/aus, 3min ein/aus. Meine überlegung ist es dass ganze mit dem Timer zu gestallen, ich lass den Timer durchlaufen und bei jedem Overflow erhöht er ein register um 1 bis eben die zeit rum ist dass er den ausgang schlaten bzw. ausschaltet. oder aber ich habe ein taster der durch drücken das vergleichsregister um 1 erhöht und einen der es verringert somit könnte ich z.B. in 30sek Schritten die Zeit sehr stark varieren lassen was ich besser fände. Das Bitmuster des vergleichregisters würde ich dann an 8 led ausgeben damit man sieht wie lange die zeit ist die man einstellt. Und zum schluss bräuchte ich nur noch einen Taster zum starten und einem um es zu stopen. Hättet ihr eine besser Idee dies zu realisieren und verbesserungsvorschläge? Weil ich bin mir meiner Sache nicht ganz sicher und bin um jeden raat froh. Habe mich davor noch nie mit Timer usw beschäftigt. Und zu letzt das ganze sollte noch vor Weihnachten fertig sein.... :( Ich danke euch schonmal für euro Antworten
> Gegeben ist ein Atmega32 welchen ich mit assembler programmieren soll. richtig so! ;) aber ich find einen atMEGA dafür übertrieben, ein attiny2313 oder so würde den job auch mehr als locker machen. im grunde kommts drauf an was du willst. wenn der µC nichts weiter machen soll als diese zeitsteuerung kannst du alles in software machen. sprich du taktest das ding mit einem recht niedrigen takt, evtl. 1mhz. dann nimmst einen der timer und programmierst den so, daß du alle sekunde einen interrupt erhältst. von mir aus auch alle 5 oder 10 sekunden, das verringert den zähler-aufwand bei längeren zeiten. dieser interrupt kann dir einen zähler inkrementieren, ganz stupide und nicht mehr - damit hast du eine stabile zeitbasis, quarzstabil sogar wenn es sein muß. das hauptprogramm macht nun nichts weiter als den zähler auf null zu setzen und dann fortlaufend zu prüfen ob der zähler den sollwert für die eingestellte zeit erreicht hat. wenn ja -> weiter. mehr isses nicht, das umfangreichste dabei ist wohl der timer, und ggf. das user-interface - aber da hast du genug pins wo man jumper anschließen und diese auslesen kann. im grunde ist deine idee also richtig, ich würd wie gesagt nur einen kleineren AVR nehmen.
bin ja froh dass meine Idde nichtz komplett falsch war. Der Controller sol erstmal nicht anderes machen als das. Aber soll später für andere Zwecke auch verwendbar sein, natürlich durch ein neues Programm. Daher der Quarz wohl nicht nur 1MHz haben sonder eher 8MHz oder ? Hätte zufällig einer ein Programmbeispiel dass in die nähe dieser Aufgabe kommt?
wenn du was größeres vorhast dann halte dich nicht an beispielen oder so fest sondern mach es selber. datenblatt raus, timer und interruptprogrammierung und ab gehts! im prinzip geht jede frequenz die du willst, bei höherem takt brauchst du halt einen entsprechend höheren vorteiler oder endwert für deinen timer damit du deine zeitbasis von x sekunden bekommst.
Ok, dann werde ich mich mal daran machen und euch es schicken mal schauen was ihr dann dazu sagt wenn es klappt
Gibt es eigentlich eine Funktion dass ich den Timer via Tastensdruck starten kann? Hab mal geschaut aber finde irgendwie nichts.
Hallo Andreas, was heisst starten ?? Du kannst das Timer register auf Null setzten und somit "startet" der Timer von vorn, wenn du mit dem Tastendruck ebenfalls erst mit der Auswertung der Überläufe anfängst hast du ihn quasi Neugestartet. Gruß Dennis
wenn du es interruptgesteuert machst kannst du zum deaktivieren einfach den entsprechenden interrupt abschalten. dann kann der zähler im hintergrund machen was er will, das programm interessiert es nicht bis du den interrupt wieder zuläßt. unmittelbar vor dem wiedereinschalten mußt du aber den zähler vom timer resetten, sonst stimmt das erste intervall nicht.
Hi ich hab mein Programm jerzt fertig, bevor ich dass nun auf den atmega downloaden kann müsste ich ja noch dir fuse-/ lockbits setzten. Meine frage ist wie ich dies machen muss ? Benutzte einen externen crystal oscillator mit 8MHz. Das Programm selbst muss nicht geschützt sein soll also auch auslesbar sein. Wäre nett wenn ihr mir helfen könnten. Danke im vorraus.
>Meine frage ist wie ich dies machen muss ?
Was hast denn an den Erklärungen im Datenblatt Deines Controllers und im
Manual Deiner Programmiersoftware nicht verstanden?
Also ich habe es nun hinbekommen dass das Programm halbwegs läuft, meine Ausgänge schlaten so wie sie es sollen allerding habe ich an Port B Leds, diese leuchten aber nicht da an Port B sich die Pegel nicht verändern wie sie es sollten. kann mir da einer helfen? muss ich den A/D Wandler erst aussschalten oder ähnliches ?
Andreas G. schrieb: > Also ich habe es nun hinbekommen dass das Programm halbwegs läuft, meine > Ausgänge schlaten so wie sie es sollen allerding habe ich an Port B > Leds, diese leuchten aber nicht da an Port B sich die Pegel nicht > verändern wie sie es sollten. Dann wirst du wohl einen Fehler im (unbekannten) Programm haben
so hab den Fehler gefunden, nun geht alles wie es soll. Danke für eure Hilfe
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.