Bitte einmal drüberschauen...könnte das klappen?

  • So, liebe Community...ich hoffe ihr könnt mir helfen.
    Ich habe eine kleine Schaltung entworfen, die der Geschwindigkeitsmessung dienen soll. Da dies mein erstes µC-Projekt ist hätte ich gern mal die Augen von ein paar Experten gefragt, die sich mit µCs etwas besser auskennen.


    Zur Arbeitsweise:
    Ich habe zwei Lichtschranken aus je einer Infrarot-LED und einem passenden Photo-Transistor. Die erste Lichschranke soll einen Timer starten, die zweite Lichtschranke soll den Timer anhalten. Der µC soll anhand der Zeit die Geschwindigkeit errechnen und auf einem LCD ausgeben. Mit dem Reset-Taster soll die Anzeige gelöscht und das Progamm neu gestartet werden.


    Das Programm ist noch in der Planung, ich muß mich in Assembler noch etwas einarbeiten. Hab aber ein Super Tutorial gefunden, dass ich durchgehen kann. Timer und die Ansteuerung von LCDs sind dort (u.a.) auch behandelt, ausführlich genug denke ich. Mir geht es erst einmal um die Hardware: Kann das so wie im Plan funktionieren? Was ist mit den freien Pins vom AVR und vom LCD-Treiber: Soll ich die auf Masse legen? Oder lieber auf Vcc?
    Sonst noch irgendwelche Verbesserungsvorschläge? Da das Gerät möglichst klein und mobil bleiben soll kommen für die Stromversorgung ein paar Batterien zum Einsatz. Wir erwarten maximale Geschwindigkeiten von etwa 200km/h. (Fragt bitte nicht, wofür das Ding genau eingesetzt werden soll...)
    Wir haben eine Meßstrecke von 10cm, ich bin am überlegen sie auf 25cm zu erweitern. Wären 10cm ausreichend, um ein auf 1m/sek genaues Ergebnis zu erhalten? (Ich weiß, mindestens 2stelliger MHz-Bereich....)
    Wie schnell kann ich einen ATMega eigt takten? (Mit externem Takt natürlich...)
    Die Werte im Schaltplan sind noch nicht fest...jedenfalls nicht alle.
    Jetzt bin ich mal auf eure Tips gespannt...


    So, hier der Plan:
    [Blockierte Grafik: http://www.imagebanana.com/img/ztwqo3zk/MGM.JPG]

    Das Erfolgskonzept von Windows ist eine gelungene Mischung aus Marketing, Korruption, Kartellmißbrauch und der erfolgreichen Spekulation auf das Naturgesetz, daß Scheiße oben schwimmt.


    Auch aus Steinen, die einem in den Weg gelegt werden,
    kann man Schönes bauen.
    Johann Wolfgang von Goethe

  • Hallo,


    Die unbenutzten Pins des LCDs sollten auf GND,
    bei den unbenutzten Pins des µC kannst du ja die internen PullUps einschalten.


    Stell das nochmal ein wenns fertig ist, würd mich interessieren.


    Hast du schon ne Idee wie du das eichen willst?


    Edit: der max. Takt der ATmega/ATtiny sind unterschiedlich.(ATmega8 bis 16MHz)
    Den Reset Taster könntest du auch noch an den ResetPin hängen, spaart noch ein Paar Zeilen Code.


    Gruss
    Snowfly

  • Mit dem Eichen hab ich mir auch schon Gedanken gemacht. Wahrscheinlich werd ich mich erstmal mit der reinen Berechnung begnügen müssen und hoffen, dass der Quarz möglichst genau geht. Vergleichen (ungefähr) könnte ich vllt mit einem schön aerodynamischen Körper (Dartpfeil?), den ich aus einer best. Höhe durch die Lichtschranke fallen lasse. Die Geschwindigkeit des Pfeils kann ich ja ungefähr errechnen.


    Dann werd ich den Plan gleichmal überarbeiten...

    Das Erfolgskonzept von Windows ist eine gelungene Mischung aus Marketing, Korruption, Kartellmißbrauch und der erfolgreichen Spekulation auf das Naturgesetz, daß Scheiße oben schwimmt.


    Auch aus Steinen, die einem in den Weg gelegt werden,
    kann man Schönes bauen.
    Johann Wolfgang von Goethe

    Einmal editiert, zuletzt von White_Fox ()

  • Servus,


    das Problem sehe ich weniger an der Zeit, da hierfür bei z.B. 180 km/h noch
    2.000 µs auf 10cm Länge rauskommen, von daher ist das kein Problem. :rolleyes:


    Aber wie willst Du die Fokusierung bei der Lichtschranke lösen? ?(
    Da müsste ja Dein Objekt durch eine Führung oder ein Rohr an dem Sensor vorbei sausen


    MfG Raimund

  • Ähm...ja, genau so soll das auch gemacht werden...

    Das Erfolgskonzept von Windows ist eine gelungene Mischung aus Marketing, Korruption, Kartellmißbrauch und der erfolgreichen Spekulation auf das Naturgesetz, daß Scheiße oben schwimmt.


    Auch aus Steinen, die einem in den Weg gelegt werden,
    kann man Schönes bauen.
    Johann Wolfgang von Goethe

  • Moin,


    Für die Genauigkeit wird hier der exakte Abstand beider Lichtschranken ausschlaggebend sein, die Quarzungenauigkeit ist hier vernachlässigbar.
    Die beiden IR-Sendedioden musst du aber schon umdrehen, in Sperrrichtung bleiben die wohl dunkel.


    Gruß Gerd

  • Die Dioden...ach Shite, stimmt. *an den Kopf klatsch*


    Ich dank dir sehr für den Hinweis...auf genau solche Korrekturen hab ich gewartet....

    Das Erfolgskonzept von Windows ist eine gelungene Mischung aus Marketing, Korruption, Kartellmißbrauch und der erfolgreichen Spekulation auf das Naturgesetz, daß Scheiße oben schwimmt.


    Auch aus Steinen, die einem in den Weg gelegt werden,
    kann man Schönes bauen.
    Johann Wolfgang von Goethe

  • hmm, die Belegung der Anschlüse am AVR ist nicht wirklich gut:


    Wenn Du solch Zeitkritischen Anwendungen hast, sollten die Lichtschranken einen "hochwertigen" Interrupt auslösen konnen. INT0/1 sollten das schon sein. (Dann ist auch das Programm einfacher zu machen..) Das LCD kann ja denn auf PBx oder vlt sogar PCx gelegt werden.
    Statt nur eines "Reset" würde ich einen "mode" schalter ins Auge fassen: single Messung, multi Messungen, fastes aus 5/10/viele, Eventzähler (auch gleich als Frequenzzähler) oder was einem dann noch so mit der gleichen HW einfällt...


    Ob man die Spannungsstabilisierung wirklich mit Z-Dioden + NPN machen muss is wohl Geschmackssache und ob die IR-LEDs eine KSK "brauchen" imho auch...


    Zu den Frequenzen: Der ATMega8 ist nur bis 16MHz angegeben, aber übertaktbar. ein ggf. ausreichender ATTiny2313 ist bis 20MHz angegeben und auch übertakbar. Falls es doch in Mega sein soll gibt es noch die ATMega48/88 fast gleich dem 8er (mit 4k oder halt der 88 mit 8k Programmspeicher) und die sind auch mit bis zu 20 MHz spezifiziert. (und auch gut übertaktbar ;) )


    Überlegung , muss ich "laut" machen :D
    240km/h --> 4km/min --> 1km in .25 min --> 66,66m/s -->15ms/m -->1,5ms/dm
    hat man wirklich "soo" lange Zeit ?
    Bei 10MHz sind das 0,1µs pro Takt ! --> ohne Vorteiler am Timer läuft ja selbst der 16Bit Timer über...

    Also, ich denke das 10MHz schon fast zu vile sind für "so langsame" Aufgeben . XD


    Bis dann , viel Glück und Spass noch ...
    ...de Igor

  • Gibt es denn einen Unterschied, ob der Interupt irgendwo bei PortB eingeht oder bei INT0 oder INT1?
    (Sicher gibts nen Unterschied, sonst hättest du es nicht erwähnt, aber wie sieht der genau aus?)


    Zu der Geschichte mit dem Vorteiler: Mein Plan wäre gewesen, den 16bit-Timer zu benutzen (evt mit CTC zu stutzen) und jeden Overflow in einem Register Register zu vermerken bzw. in mehrern Registern. Wie weit kann ich den AVR damit denn zählen lassen? (Vorrausgesetzt, alles andere wird auf den Stapelspeicher gerettet.)


    Wenn ich, sagen wir mal 10 Register vollzählen kann ->255^5 -> auf jeden Fall genug, um auf 0,000 000 001 sek. zu stoppen. (Da muß der Abstand ja wirklich verdammt genau sein. :D)


    Mit 10MHz könnte ich theoretsch 0,000 000 001sek messen. Paßt doch. :D Oder stell ich mir das zu einfach vor und kann soviele Register gar nicht vollmachen?


    Natürlich sind ide Zahlen ziemlich oversized...wenn ich die Geschwindigkeit auf den Meter/Sek genau bekomme reicht das schon völlig...


    Ich werd dann mal die Drähte umsetzen...

    Das Erfolgskonzept von Windows ist eine gelungene Mischung aus Marketing, Korruption, Kartellmißbrauch und der erfolgreichen Spekulation auf das Naturgesetz, daß Scheiße oben schwimmt.


    Auch aus Steinen, die einem in den Weg gelegt werden,
    kann man Schönes bauen.
    Johann Wolfgang von Goethe

  • Beim Mega48/88/168 gibt's ja noch den Pin Change Interrupt, der geht an fast jedem Pin... wegen der "Wertigkeit"/Priorität ist's auch egal, solange keine anderen Interrupts benutzt werden, die da reinpfuschen können... diese "Rangordnung" spielt ja nur dann eine Rolle, wenn mal zwei Interrupts zufällig genau gleichzeitig angefordert werden...


    ansonsten könnte man hier natürlich auch pollen, würde genauso gehen...


    ich würde da schon nen Mega48 oder 88 nehmen, und neben dem Display auch gleich 4 Taster anschließen, wenn man schon ein Display hat, kann man dann ggfs. mal ne Menuesteuerung programmieren - und den Tx- und Rx-Pin rausführen, dann kann man das Teil evtl. mal (z.B. über RS232 oder FT232RL) an den PC hängen - sind ja nur ein paar Bauteile mehr, aber wenn Du die sparst, ärgerst Du Dich hinterher, weil Du dann dies&das nicht auch noch machen kannst ohne Umbau...


    Das mit dem Timer ist mir jetzt um diese Uhrzeit zu hoch :D - klar, wenn der mit Prescaler 1 mit 10 MHz läuft, kannst Du auf 0,1 µs genau messen, wenn Du den Zählerstand ausliest - wenn 10µs Genauigkeit reichen, kannst Du ja per CTC alle 100 Takte nen Interrupt auslösen, in dem Du nen Zähler weiterzählst - das muss ja kein Register sein, Du kannst das auch im Ram ablegen, dann kannst Du meinetwegen auch ne 1.024-Bit-Zahl machen oder noch mehr...


    Nur, die Geschwindigkeit ist ja "umgekehrt" - je kürzer die Zeit, desto höher die Geschwindigkeit - da müsste man also dann "1 durch Zeit" rechnen, ist die Frage, wie genau das dann wieder geht...?


    wegen der Lichtschranke: klar, Sender und Empfänger jeweils in ein Rohr rein, so wie man das von der Polizei ja auch kennt - noch genauer würde es wohl mit zwei Laserpointern/Dioden gehen... ich nehme mal an, da geht's um irgendein Fahrzeug/Modellauto o.ä.? - wenn's drum geht, einen Tennisball zu messen, oder wie schnell ein Fußball getreten wird o.ä., dann müsste man natürlich *irgendwie* dafür sorgen, dass der die beiden Lichtschranken passiert, ich nehme mal an, das hat Raimund gemeint...?

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Huh...ok. Hab mich eben nochmal in das Kapitel Interrupts kurz reingelesen...der Schaltplan wird sofort geändert.


    Nein, ein Tastenfeld soll da nicht rein...Leute, das ist mein erstes AVR-Projekt, und ich weiß dass das als Einstieg schon recht umfangreich ist.
    Ich brauch aber immer eine praktische Anwendung wenn ich in sowas einsteigen will, nicht sowas nutzloses wie ein paar blinkende LEDs oder so.


    Die Idee mit nem Laser ist auch nicht schlecht...ich werd darüber mal nachdenken. Aber mit IR-LEDs wird das auch gehen...da bin ich mir sicher. ;)


    Ein paar ATMega8-Käfer hätte ich da...und auf den bezieht sich auch das Tut, das ich fleißig studiere. Daher hätte ich schon gerne den genommen...

    Das Erfolgskonzept von Windows ist eine gelungene Mischung aus Marketing, Korruption, Kartellmißbrauch und der erfolgreichen Spekulation auf das Naturgesetz, daß Scheiße oben schwimmt.


    Auch aus Steinen, die einem in den Weg gelegt werden,
    kann man Schönes bauen.
    Johann Wolfgang von Goethe

  • Der Unterschied zwischen dem Atmega8 und Atmega88 ist nicht so riesig. Hauptsächlich unterscheiden sich da nur einige Registernamen. Da kommt man trotzdem mit dem Atmega8 Tutorial gut klar (ich sprech da aus Erfahrung ;) ).


    Die Taster brauchst du ja am Anfang nicht zu nutzen / bestücken. Das ist dann eher ein nettes Add-on um die Anlage mal zu erweitern. Da brauchst du dann an der Hardware nix großartig ändern. Da reicht dann ein Softwareupdate ;)

  • Für die zwei Interrupts, die er braucht, reicht ja auch der mega8 locker aus. Demnach die Sensorik an PD2 (INT0) und PD3 (INT1) anschließen. Klar ists nicht so der Hit, alte - auslaufende Typen - für neue Schaltungen zu verwenden, aber er plant ja nun nicht das Ding in Serie zu produzieren. Wenn der mega8 vorrätig ist, nimm den. Die Unterschiede zu den neuen Ersatztypen sind eh nicht so groß: Taktrate, PWM, PCINT an jedem Pin, das wars schon soweit ich das richtig überflogen habe.

  • Man könnte hier eventuell auch die Input Capture Einheit des ATmega8 (via ICP-Pin) verwenden, v.a. wenn die beiden Lichtschranken zwei zeitlich nicht überlappende Signale liefern (wenn also das zu messende Objekt zu keinem Zeitpunkt beide Lichtschranken gleichzeitig abdeckt). Dann könnte man die Kollektoren der beiden Phototransen direkt zusammen mit nur einem Pullup-R am ICP-Pin anschliessen.
    Man hätte dann zwei Capture-Events, wobei jeweils automatisch bei jedem Event der aktuelle Zählerstand des Timer1 ins ICR1 (Input Capture Register) kopiert wird und ein ICR-Interrupt ausgelöst werden kann. Die Differenz des ICR1-Werte bei zwei aufeinander folgenden Events ergibt dann den Zählerwert für die Durchlaufszeit. Mittels Überprüfung (und Löschung falls gesetzt) des Timer1-Overflow-Flags könnte mann die Differenz auch dann korrekt bestimmen, wenn zwischen den beiden Events der Timer1 gerade überlaufen wäre.
    Im Übrigen reicht der Wertebereich des Timer1 (16 Bit) bei 10 MHz locker zur Messung der zu erwartenden Zeitabstände aus (bis runter auf ca. 55 km/h), auch ohne mehrere Overflows zählen zu müssen, denn bei 10 MHz und Prescaler 1 kann der Timer1 bis zu 6,5536 ms erfassen, und das ist ja laut den Berechnungen oben mehr als genug beim vorgegebenen Versuchsaufbau.


    Gruss
    Neni

  • Hier von mir nochmal ein grober Vorschlag für einen Ablaufplan:



    und DAS wars auch schon . ;) DAmit dürfte sich der ATMega8 die meiste Zeit langweilen . ^^
    (lässt sich ja dann auch schön für nen Stomparmodus nutzen . ^^ )


    Wenn man die EIngänge "per Hand" abfragt/pollt gäbe es imho immer ein paar Takte "Unschärfe". Pollen kann ich nicht "immer" - IRQs schon.


    Ach ja, ich wär gespannt was daraus geworden ist. :D
    73 de Igor

  • Mensch, ihr seid ja super. Ich bin schwer begeistert...:D


    Igor :
    Mit dem Programm hab ich mich nur ganz, ganz grob beschäftigt...da ich zur Zeit keinen Arbeitsplatz hab um die Platine zu bauen entwerfe ich den Schaltplan und lass das Ding von einem Freund fertigen, der in dem Projekt ebenfalls involviert ist.


    Ich werd das Ergebnis auf jeden fall reinstellen, verlass dich drauf. Aber bevor es soweit ist dürfte es noch etwas dauern...Arbeit und Uni lassen mir auch leider nicht allzuviel Zeit für derlei Dinge zu schaffen. :(



    synvox :
    Ich hab mich gestern nochmal mit INT1 und INT0 beschäftigt....ich glaube es ist am Besten, wenn ich die fallende Flanke (dann, wenns am Transistor finster wird) als Interrupt nehme. Und das geht ja nur mit den beiden Pins...

    Das Erfolgskonzept von Windows ist eine gelungene Mischung aus Marketing, Korruption, Kartellmißbrauch und der erfolgreichen Spekulation auf das Naturgesetz, daß Scheiße oben schwimmt.


    Auch aus Steinen, die einem in den Weg gelegt werden,
    kann man Schönes bauen.
    Johann Wolfgang von Goethe

  • So...ich hab den Schaltplan umgeschrieben, das LCD auf Port C gelegt und die Lichtschranken hängen an INT0/1. Eine fallende Flanke müßte ja reichen für den Interrupt...oder?


    So, hier der Schaltplan.
    Kann ich eine Platine so von meinem Freund fertigen lassen?
    [Blockierte Grafik: http://www.imagebanana.com/img/gukre0ks/MGM2.JPG]

    Das Erfolgskonzept von Windows ist eine gelungene Mischung aus Marketing, Korruption, Kartellmißbrauch und der erfolgreichen Spekulation auf das Naturgesetz, daß Scheiße oben schwimmt.


    Auch aus Steinen, die einem in den Weg gelegt werden,
    kann man Schönes bauen.
    Johann Wolfgang von Goethe

  • nur mal na dumme Frage...


    du hast ein normales LCD dran. Das kannst du doch gleich mit 8 bit aus einem Port belegen plus R/W und RS aus einem anderen Port. Pins sind doch genug über. Oder geht das nicht?


    Ich denke, das könnte das Ansteuern vom LCD einfacher machen.


    Ansonsten aufpassen, daß die unbenutzten Pins vom LCD nicht floaten.