Hallo Leute, für Euch mal sicher wieder ne lächerliche Frage. Bin zwar noch nicht mit C angefangen, aber gerne ein Beispiel in C. Konnte nichts dazu finden. Wie kann ich lange Pausen einfügen, sodass ein Sensor zum Beispiel alle Stunde abgefragt wird. Alles was ich lese sind immer ms und dann in der Aufrechnung bis in die Sekunden, aber von Minuten oder Stunden hab ich noch nichts gelesen. Wie geht das? Gern auch zusätzlich in Assembler (will ich auch lernen:-) ). Danke! Grüße Frank
Versuch als erstes das AVR-Tutorial durchzuarbeiten. Meine Empfehlung: Zuerst Assembler, wenn du das gut kannst, C. Wenn du C schon vom PC-Programmieren her kannst, auch eher. Zu deiner Frage: Für so lange Verzögerungen nutzt man nicht Warteschleifen, die sinnlos Zeit vertrödeln, sondern einen Timer. Wenn der Timer nach einer gewissen Zeit "klingelt", zählt man eine Variable um 1 hoch. Bei einem gewissen Wert (abhängig von Taktfrequenz und Timer-Einstellungen) ist dann eine Stunde vergangen. Solange der Timer läuft und dein Mikrocontroller nichts zu tun hat, kannst du ihn sogar in den Sleep Modus versetzen, um Strom zu sparen.
Danke!!! Mein Gott, man kann ja sooo doof sein. Tausendmal gelesen. Ich hatte bis jetzt mit Arduino angefangen, aber das reicht mir nicht. Wollte gleich mit C++ anfangen, aber da mir alle abrieten, habe ich mir nun einige Bücher bestellt. Unter anderem auch AVR1, von Schabel-Schmitt. Denke auch, dass ich wahrscheinlich doch mit Assembler anfangen werde (hab auch mal CNC (vor ner Ewigkeit) gelernt und klare Kommandos sind mir eh am liebsten. Mal sehen. Nochmals vielen Dank!!! Lieben Gruß Frank
Frank O. schrieb: > Unter anderem auch AVR1, von > Schabel-Schmitt. Verschrieben. Der Autor heißt Manfred Schwabl-Schmidt.
Frank O. schrieb: > klare Kommandos sind mir eh am liebsten. Dafür ist ja C gut geeignet. Für mich ist es deutlich klarer zu lesen Sekundenzaehler=60 als ldi r16,60 ; R16 soll mein Sekundenzaehler sein
Wegstaben Verbuchsler schrieb im Beitrag #29642I91: > ldi r16,60 ; R16 soll mein Sekundenzaehler sein > Werde ich ja noch sehen, aber "lade sofort ins Register 16 den Wert 60" ist doch auch klar?! Wenn man genau weiß wie etwas geht, dann ist sicher alles ganz einfach. Aber Assembler hat den Vorteil, man lernt den µC besser kennen. Denke ich mir. Aber ??? keine Ahnung ob ich richtig liege. Ich denke mir Assembler ist so ein bisschen wie, "jetzt schalte den dritten Gang rein" und C ist mehr "Wenn du jetzt im 2 Gang bist oder vielleicht im 1 Gang, aber nicht im 4 Gang, dann bist du im 3 Gang. Schalte jetzt in den 4 Gang"
Frank O. schrieb: > Wenn man genau weiß wie etwas geht, dann ist sicher alles ganz einfach. > Aber Assembler hat den Vorteil, man lernt den µC besser kennen. Denke > ich mir. Aber ??? keine Ahnung ob ich richtig liege. Im Grunde musst du auch in C die Hardware deines µC gut kennen. Das schenkt sich nichts. > Ich denke mir Assembler ist so ein bisschen wie, "jetzt schalte den > dritten Gang rein" und C ist mehr "Wenn du jetzt im 2 Gang bist oder > vielleicht im 1 Gang, aber nicht im 4 Gang, dann bist du im 3 Gang. > Schalte jetzt in den 4 Gang" Nicht wirklich. Es heisst auch in C "Leg den 3. Gang rein". Einziger Unterschied: In C schreibst du das mehr oder weniger auch so Gang = 3; ohne dich darum kümmern zu müssen, welches Zahnrad in welches andere Zahnrad greifen muss und dass du auch noch auf die Synchronringe aufpassen musst. C nimmt dir einfach nur die vielen kleinen Detailproblemchen ab, um die man sich im Assembler selbst kümmern muss. Aber die ersten Schritte in Assembler zu machen, ist schon sinnvoll. Der Zugang ist dann ein etwas intimerer.
kurzes Beispiel: vom int gebildete kurze Zeiten werden per flag in die Hauptroutine übertragen und dort gezählt und alle Sekunde wird dann etwas ausgeführt. Einer der Zähler ist so eingestellt, dass er alle 10 ms einen ovl-int macht (tick) ovlint: ;im int wird alle 10 ms ein Flag (t-flag) gesetzt set . . ;eventuell weitere Aktionen der int-routine . reti main: . . brtc ;wenn kein t, dann in main bleiben clt ;t-flag rücksetzen inc r22 ;ticks zählen cpi r22,100 ;Wenn 100 tics, dann eine sec vorbei brne weiter . ;Aktion, die jede sec ablaufen soll . clr r22 ;Zähler neu setzen weiter: rjmp main
Karl Heinz Buchegger schrieb: > Aber die ersten Schritte in Assembler zu machen, ist schon sinnvoll. Der > Zugang ist dann ein etwas intimerer. Da bin ich anderer Meinung. Ich würde ja in Assembler als Anfänger verzweifeln, sobald das Programm etwas sinnvolles machen soll, das über LED-Blinken hinaus geht. Man muss jeden einzelnen Prozessorbefehl mitsamt seinen Nebenwirkungen kennen und die ganzen Standardkonstrukte wie Schleifen, Funktionen, Datentypen mit mehr als 8 Bit usw. mühsam von Hand implementieren, die in C selbsterklärend sind. Imo ist das reine Strafarbeit. "Etwas intimer" ist es allerdings schon, das stimmt natürlich. Das kann man sich aber auch noch aufheben, wenn man C schon kann. Ob man das allerdings dann noch will, steht auf einem anderen Blatt. Ich habe nie den Drang verspürt. Habe mich zwar schon mal an kleineren Inline-Assembler-Stückchen versucht und mir ab und zu angeschaut, was der Compiler aus meinem Code macht, kann es also einigermaßen lesen, aber selber schreiben möchte ich das nicht.
Mein Kerninghan & Ritchie hat ein anderer, wer weiß ich nicht mehr. Nun hab ich mir folgende Bücher bestellt. Nur schade ums C++ Buch. Das wäre mein Stil gewesen, aber leider seid ihr alle (aus gutem Grund, den ich nun nachvollziehen kann) dagegen. Diese Bücher hab ich mir bestellt: C: Programmieren von Anfang an Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie: Programmierung in Assembler und C - Schaltungen und Anwendungen [Taschenbuch] AVR-Programmierung 1: Grundlagen und der Aufbau von Programmstrukturen: BD 1 [Broschiert] AVR-Mikrocontroller in C programmieren: Über 30 Selbstbauprojekte mit ATtiny13, ATmega8, ATmega32: Über 30 Selbstbauprojekte mit ATtiny13, ATmega8 und ATmega32 [Gebundene Ausgabe] Hat jemand von euch eines dieser Bücher gelesen oder kann mir jemand sagen welches das sinnvollste aus seiner Sicht ist; dann bitte begründen. Zunächst tendiere ich zum AVR-Programmierung. Gerade Assembler, weil ich mir so erhoffe gleichzeitig das "Innenleben" der µC's richtig zu verstehen. Wenn man das erstmal kann, und hier knüpfe ich gern an die Synchronringe an, dann ist der Rest sicher leichter. Um bei den Synchronringen zu bleiben. Viele die ein Auto fahren wissen nicht mal was da im Getriebe passiert und dass es Synchronringe hat schon mal gar nicht. So ähnlich ist es sicher auch mit den Hochsprachen. Hab gerade noch einen Umrichter zerlegt um zu sehen was da kaputt gegangen ist und wie das Teil aufgebaut ist. Es ist meine Natur den Dingen auf den Grund zu gehen und ich möchte jedem Bit die Hand geschüttelt haben -nicht sofort, aber irgendwann- denn erst dann fühle ich mich sicher. Bei der CNC Programmierung war es auch so, da musste ich jede Kleinigkeit und jeden Millimeter im Programm vorgeben. Ich fand das gut. Denke, wenn man das "Innenleben" erstmal richtig versteht, dann kann man auch besser die Fehler finden, ganz gleich mit welcher Sprache man programmiert.
Karl Heinz Buchegger schrieb: > Es heisst auch in C "Leg den 3. Gang rein". > Einziger Unterschied: In C schreibst du das mehr oder weniger auch so > > Gang = 3; In C wird ab 0 gezählt. Der dritte Gang ist also der Gang mit der Nr. 2 :-) Viele Grüße, Simon
Simon Budig schrieb: > In C wird ab 0 gezählt. Der dritte Gang ist also der Gang mit der Nr. 2 > :-) > > Viele Grüße, > Simon Vielleicht wäre die 0 ganz gut für den Rückwärtagang ;)
Eumel schrieb: > Vielleicht wäre die 0 ganz gut für den Rückwärtagang ;) Mh -1 wäre auch tauglich, aber dann müsste man mit signed arbeiten aber man könnte die 0 nutzen für leerlauf
Simon Budig schrieb: > Karl Heinz Buchegger schrieb: >> Es heisst auch in C "Leg den 3. Gang rein". >> Einziger Unterschied: In C schreibst du das mehr oder weniger auch so >> >> Gang = 3; > > In C wird ab 0 gezählt. Der dritte Gang ist also der Gang mit der Nr. 2 > :-) > > Viele Grüße, > Simon Mist. Jetzt wird mir so einiges klar :-)
Frank O. schrieb: > Um bei den Synchronringen zu bleiben. Viele die ein Auto fahren wissen > nicht mal was da im Getriebe passiert und dass es Synchronringe hat > schon mal gar nicht. Das ist schon ein gutes Beispiel. Hast Du Dir als Fahranfänger auch erstmal Bücher über Fahrzeugtechnik gekauft und im Detail studiert, wie das Getriebe, der Motor etc. funktioniert, bevor Du losgefahren bist? Und Dich dann als erstes in einen Oldtimer ohne synchronisiertes Getriebe gesetzt, um gleich mit Zwischengas schalten zu lernen? Klar kann man das machen und danach kommt man mit einem modernen Auto sicher leichter zurecht, also wenn man zum ersten mal am Steuer sitzt. Aber der Einstieg ist doch um einiges erschwerlicher und die Gefahr groß, dass man die Motivation verliert. Fang doch einfach mal mit etwas an, zum Beispiel mit dem AVR-GCC-Tutorial hier auf der Seite oder auch mit dem AVR-Tutorial für Assembler. Mach die ersten Programme (LED blinken etc.) sowohl in C als auch in Assembler und vergleiche sie. Dann siehst Du nach ein paar Versuchen, was Dir für den Anfang besser liegt. Ich würde dann das Tutorial durcharbeiten bzw. ein eigenes Projekt versuchen und die Bücher zur Vertiefung nebenbei lesen. Aber gut, jeder ist ein anderer Lerntyp. Wenn Du lieber zuerst die Theorie liest, dann mach es so. Die Bücher kenne ich nicht, daher kann ich Dir dazu keinen konkreten Tipp geben.
Hallo Fabian, das ist eine tolle Idee (und so nahe liegend), das beides im Vergleich zu machen. Ich hatte eine ähnliche Idee. Da das eine Buch C allein ist und nicht explizit für Mikrocontroller, wollte ich das als Theorie nehmen und das andere, vom Professor Schmitt, das geht auf Assembler und auf C ein und ist für die Anwendung auf Mikrocontroller geschrieben. Werde dann noch mal mit dem Blinkdings anfangen und möglichst schnell mein Projekt (das ich mit Arduino machte) dann in C und Assembler realisieren. So denke ich eine gute Basis für weitere Richtungen zu bekommen. Und wenn ich das Projekt dann umschreiben will (muss ich sowieso noch), dann kann ich das gleich in einer "richtigen" Sprache machen. Danke für die vielen Tipps! Zu der Art wie ich lerne. Ich springe oft zwischen verschiedenen Sachen rum (bei der Elektronik ist ja auch noch die Hardware zu bewältigen) und aus der Summe (sogar aus den Pausen dazwischen) bildet sich dann das Verständnis dafür. Wenn ich immer nur auf einem sitze, dann ist immer die Gefahr da, dass ich nicht erst los fahre, sondern zunächst erst die "Synchronringe" ausbaue und sehe wie sie so aussehen, um dann das Getriebe ohne selbige auch noch ausprobieren zu wollen. Am Ende lande ich dann ganz schnell bei Adam und Eva.
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.