Schönen guten Abend!
Ich habe vor, eine Stoppuhr zu bauen. (Atmel Mega 8)
Ich habe mir das schon so weit überlegt, jedoch brauche ich einen
Impuls von einer Sekunde. Wie kann ich eine Sekunde Verzögerung
einbauen?
Gibt es da einen entsprechenden Timer oder kann ich das über
Zählschleifen machen? Wie finde ich raus, wieviel Zählvorgänge ich
brauche?(in Asselbler)
Ich habe mir überlegt, die Ausgänge dann im BCD Code vorliegen zu haben,
um so 7 Segmentanzeigen ansteuern zu können. Jedoch brauche ich vier
solcher 7 Segmentanzeigen, also 16 Ausgänge. Ich habe aber nur 12. (Port
D, C, B).
Gibt es Alternativen, sodass ich mit einem Mikrocontroller auskomme?
>Ich habe mir das schon so weit überlegt, jedoch brauche ich einen>Impuls von einer Sekunde.
Aeonen für einen Mikrocontroller...
>Gibt es Alternativen, sodass ich mit einem Mikrocontroller auskomme?
Ja, lern das Ding richtig kennen. Hier auf der Seite gibt es diverse
Tutorien.
(wenn man in der Codesammlung "ziemlich simple Uhr" in der Betreffsuche
eingibt, findet man eine Lösung; gibt man nur "Uhr" ein, findet man ein
paar mehr...)
Statt irgendwelcher BCD-Siebensegment-Decoder kann man lieber die
Anzeige multiplexen. Und selbst dabei langweilt sich der Controller...
Hi,
erst mal das wichtigste: das packt ein Mega8 locker (und langweilt sich
dabei noch).
Einen Sekundentakt erzeugst du dir mit einem der Timer (-> Datenblatt
lesen), verbrat dafür bitte keine Rechenzeit mit Warteschleifen.
Die vier 7-Segment-Anzeigen kannst du Zeit-Multiplexen, dann benötigst
du nur die Ausgänge für eine Anzeige und zusätzliche 4 zum auswählen der
aktuellen Anzeige. Wurde schon oft genug hier besprochen, sollte kein
Problem sein da Infos zu finden. (Kurzfassung: Die Anzeigen sind alle
parallel geschaltet, die gemeinsame Anode/Kathode jeder Anzeige kann
jedoch z.B. über einen Treibertransistor geschaltet werden).
Zum Multiplexen brauchst Du, wie oben geschrieben je einen Transistor
für ein Display. In Deinem Fall also 4 ganz gewöhnliche
Feldwaldundwiesentransistorien.
Im Prinzip geht das Multiplexen so:
- alle Transistoren sperren
- Inhalt für n. Display auf den Displayausgang schreiben
- Transistor für n. Display aufsteuern
- Transistor für n. Display sperren
- n+1 und von vorn
@ frank:
Hat sich das Bascom-Forum tatsächlich das Copyright für diese
0815-Schaltung sichern lassen? Das wäre ja mehr als lächerlich!
Ansonsten würde ich so 'ne Peinlichkeit nicht in den Schaltplan
schreiben! ;-)
Die, dass Bascom eine 'Blackbox' ist und den Eindruck vermittelt, ohne
Grundkenntnisse AVRs programmieren zu können. Viele Beiträge hier im
Forum haben das bestätigt. Ich halte nichts von Basic oder Bascom.
Ist aber meine persönliche Meinung!
Das meine ich ja. Zuerst in Assembler beginnen, das Datenblatt als
besten Freund zurate ziehen, wenn die Hardware geläufig ist kann mit
Hochsprachen begonnen werden. Bei C ist noch durchschaubar oder
dokumentiert was bei den einzelnen Befehlen passiert, bei Bascom
stochert man im Trüben und muss sich auf den Compiler verlassen. Das
scheint beim ersten Blick einfach zu sein, stellt einen aber schnell vor
unlösbare Probleme.
in bascom kann man ganz einfach assembler einbinden und muss auch nicht
unbedingt die hochsprachen befehle benutzen dann bleibt alles
überschauber,
man kann ganz einfach alle register wie in assembler anspreche und jedes
bit setzen.
habe ich jahrelang getan aber die faulheit hat mich zu bascom gebracht
c habe ich auch schon probiert klammeraffen orgie nenne ich das.
ist einfacher mit hochsprache und besser portierbar auf fast alle avr
typen
bei assembler wirste wahnsinnig,
Stimmt schon, Klammeraffen gibt's ordentlich! ;-)
Assembler benutze ich auch nur noch auf den Speicherschwachen Teilen.
C (WINAVR) ist eben sauber durchschaubar und dokumentiert. Außerdem weiß
hier im Forum 'ne Menge Leute Bescheid drüber!
frank wrote:
> habe ich jahrelang getan aber die faulheit hat mich zu bascom gebracht> c habe ich auch schon probiert klammeraffen orgie nenne ich das.> ist einfacher mit hochsprache und besser portierbar auf fast alle avr> typen> bei assembler wirste wahnsinnig,
Wer das über C sagt, kann kein C programmieren...
Wenn man sein Werkzeug (C-Compiler) benutzen und vor allem ausreizen
kann, wird das Programm sowie das Programmieren schnneller sein als
Black-Box-Bascom*
*Jaja, auch nur meine Meinung.. Bin aber sehr überzeugt davon. Und dies
soll keine Anstiftung zum Programmiersprachen-Glaubenskrieg sein.
>C (WINAVR) ist eben sauber durchschaubar und dokumentiert. Außerdem weiß>hier im Forum 'ne Menge Leute Bescheid drüber!
Dem stimme ich zu.
Achja, zum Thema: Ich würde das ganze per Timer machen. Nicht per
Zählschleife. Eine Timer-Zeitbasis ist stabiler, wenn die Ausgabe auch
noch parallel ablaufen soll. Die Ausgabe auf die Anzeigen (zB per
Multiplexing, oder Schieberegister) kann dann als Hauptaufgabe
passieren. Die Zeitbasis und das Zählen der Zeit kann im Timer-Interrupt
geschehen.
Hallo,
Timer mit 1ms-IRQ. Uhr zählen und nächste Stelle im Multiplex ausgeben.
Die Displaydaten liegen als7-Segmentmuster in 4 Ram-Adressen oder
Registern. Dazu noch ein Register/Ram-Adresse für die aktuelle Stelle
und ein Register/Ram-Adresse für den Dezimalpunkt.
Sind in der IRQ-Routine nur wenige ASM-Befehle, um die nächste Stelle
rauszubefördern.
Alle Stellentreiber aus
Displayram-Adresse Z laden
Segmentwert aus (Z+) holen
Segmentdaten rausschreiben
Test, ob Dezimalpunkt mit für aktuelle Stelle an ist (ist auch als
Bitmuster gespeichert)
Wenn ja -> Bit im Segment IO setzen
Digitbit ausgeben (ist bereits passendes Bit gespeichert)
Digit nach links schieben (nächste Stelle)
Digit mit letzter Stelle nach letzter Stelle vergleichen
wenn ja -> Erstes Digitbit laden, Z mit erster Dispkayadresse laden
Z speichern
Ende IRQ
In jedem 10. IRQ-Aufruf werden bei mir noch die Tasten bearbeitet und
entprellt.
Gruß aus Berlin
Michael
Hey Leute
Ich hab noch nicht so viel Erfahrung mit basic und brauche Hilfe von
paar die schon was wissen.
Also
Hab eine Stoppuhr programmiert, die auch läuft. Jedoch weiß ich nicht
wie ich das machen soll, dass sie im Sekundentaktläuft.
> Ja was macht die Stoppuhr denn dann? Aufstehen und weglaufen?
Aber vermutlich nur bis zum nächsten Stoppschild?
> dass sie im Sekundentaktläuft.
Im Sekundentakt? - Warum nicht im Zentisekundentakt oder
Millisekundentakt? Eine Sekunde ist für einen Mega8 eine halbe Ewigkeit.
Hier ein paar Stichworte: Quarz, Timer-Interrupt
...
Hi
Lies dir doch einfach mal andere Beiträge über Stopuhren durch. Ist
scheinbar ein Allerweltsthema. Zu den Programmiersprachen:
Eigentlich ist es egal, welche Sprache benutzt wird. Auch Assembler läßt
sich strukturieren und muß einen nicht Wahnsinnig machen. Im Gegenteil,
es zwingt, eine Struktur einzuhalten. Bei allen Programmiersprachen ist
ein logisches Denken Voraussetzung. Deshalb haben es Frauen schwerer,
einfach nur Ja oder Nein zu sagen. Aber es gibt auch männliche
Quasselstrippen....
Ich persönlich favorisiere auch Assembler. Und eine Stoppuhr ist ein
guter Einstieg. Dazu sind hier in den Tutorials auch gute Erklärungen
der Möglichkeiten.
Gruß oldmax
Hannes Lux schrieb:
> Dazu braucht man kein RN, es genügt, sich die mitgelieferten Beispiele> anzusehen.
Und ich dachte immer, für nen richtigen Bascomer ist es strengstens
verboten, in die Hilfe zu schauen, oder ins Manual oder in die Beispiele
:-)
Peter
Peter Dannegger schrieb:
> Und ich dachte immer, für nen richtigen Bascomer ist es strengstens> verboten, in die Hilfe zu schauen, oder ins Manual oder in die Beispiele
Nein wieso?
das sind mal wieder so die typischen klisches....
Außer dem ist das da besser erklärt als in der mitgelieferten Hilfe von
Bascom-Avr
gruß
Tobi
> Und ich dachte immer, für nen richtigen Bascomer ist es strengstens> verboten, in die Hilfe zu schauen, oder ins Manual oder in die Beispiele> :-)
Da ist was dran, trotzdem sollte man das nicht verallgemeinern. Denn es
gibt verschiedene Motive, Bascomer zu werden/sein.
Der Eine benutzt es konsequent, weil er mal (im Zustand geistiger
Umnachtung) viel Geld dafür bezahlt hat.
Andere benutzen es, weil sie denken, Basic (von anderen Systemen her) zu
beherrschen.
Die Gruppe, die Du meinst, hat irgendwo mal gehört, dass es mittels
Bascom kinderleicht sei, ohne jedes Fachwissen AVRs zu programmieren.
Sie schaun weder ins Datenblatt des Controllers, noch in die Doku ihrer
Software, denn es macht weniger Mühe, einfach zu fragen und mundgerechte
Antworten zu erwarten. Man muss/will es ja nichtmal verstehen,
hauptsache es funktioniert.
...