Guten Tag, ich arbeite momentan an einem Projekt für die Schule. Das
Projekt heißt Distanzmesser (mit HC-SR04, Atmega32-16pu und
Ultraschallsensor), ihr wisst wahrscheinlich was es machen muss, wenn
nicht, es soll den Abstand zwischen dem Sensor und einem Objekt messen
und auf das Display transferieren. Jetzt muss ich einen Taster
hinzufügen und nach dem drücken soll der Abstand in Inch angezeigt
werden. Jedoch bin ich momentan planlos und bräuchte eure Hilfe. Die
Taste ist mit PINB3 verbunden und hat einen Pullup Wid von 10kOhm.
Code bis jetzt:
1
#define F_CPU 1000000UL
2
3
#include<asf.h>
4
#include<avr/io.h>
5
#include<MrLcd/MrLCDATmega32.h>
6
#include<avr/interrupt.h>
7
#include<util/delay.h>
8
#include<stdlib.h>
9
10
staticvolatileintpulse=0;
11
staticvolatileinti=0;
12
staticvolatileintmodus=0;//0=cm, 1=inch //Habe das vorgeschlagen bekommen
steffi schrieb:> Jedoch bin ich momentan planlos und bräuchte eure Hilfe.
Du solltest selber mal etwas ausprobieren und bei spezifischen Problemen
um "Hilfe" fragen. Denn "Hilfe" bedeutet nicht "Alles vormachen und
fertig gelöste Hausaufgabe präsentieren".
> Die Taste ist mit PINB3 verbunden und hat einen Pullup Wid von 10kOhm.
Welchen Pegel hat also der Pin B3, wenn die Taste gedrückt oder nicht
gedrückt ist? Wie liest man so eine "low-aktive" Taste ein? Es gibt
tausende Beispiele dafür...
Du kannst dir dann auch gleich mal die Themen "Entprellen" und
"Flankenerkennung" ansehen. Du wirst diese Mechanismen brauchen.
Ein Tipp: wenn du den Abstand nur "während der Taster gedrückt ist" in
Inch anzeigst, dann ist die Umschaltung voll simpel.
> Code bis jetzt:
Bitte künftig die [c] Tags verwenden, wie über jeder Eingabebox gleich
unter "Antwort schreiben / Wichtige Regeln - erst lesen, dann posten!"
beschrieben.
Mögliche Idee:
Mit einem Flag umschalten, ob cm oder in ausgegeben werden.
In der Schleife schauen, ob der Taster gedrückt ist und wenn ja, das
flag umschalten und eine kleine Verriegerung setzen, damit wenn der
Taster gedrückt bleibt, nicht wieder beim nächsten Durchlauf
umgeschaltet wird.
Gaaaanz grober Pseudocode:
1
While(1)
2
{
3
...
4
if(unitflag)
5
print(value "cm")
6
else
7
print(value/2.54 "in")
8
9
...
10
if( taste_gedrueckt && !lockout)
11
unitflag XOR 1
12
lockout = 1
13
else
14
lockout = 0
15
16
}
Die "optimalste" Lösung wäre natürlich, die Umschaltung in einem
Timer-Interrupt zu machen. Da kann man dann gleich den Taster entprellen
und wenn der Taster sicher gedrückt wurde, umschalten
steffi schrieb:> Jetzt muss ich einen Taster hinzufügen und nach dem drücken soll der> Abstand in Inch angezeigt werden.
Unklare Aufgabenbeschreibung, naturlich ist dann unklar wie man das
löst.
Soll nur während man den Taster drückt die Anzeige auf inch springen und
nach dem loslassen wieder cm, oder soll jeder Druck auf den Taster
umschalten zwischen cm und ich und cm ?
Für letzteres brauchst du ein flag (bool'sche Variable des Zustandes)
und musst die Taste entprellen.
Fur ersteres braucht es nur ein if.
MaWin schrieb:> steffi schrieb:>> Jetzt muss ich einen Taster hinzufügen und nach dem drücken soll der>> Abstand in Inch angezeigt werden.>> Unklare Aufgabenbeschreibung, naturlich ist dann unklar wie man das> löst.>> Soll nur während man den Taster drückt die Anzeige auf inch springen und> nach dem loslassen wieder cm, oder soll jeder Druck auf den Taster> umschalten zwischen cm und ich und cm ?
eigentlich nicht..
da steht doch
"nach dem drücken" also danach!
sonst stünde da doch "beim drücken" also während!
möglicherweise missverständlich wäre
"durch drücken" was beides einschliessen könnte ...während und danach.
Die Frage ist nur, soll durch zweimaliges Drücken die Anzeige wieder
auf vernünftige Werte zurückspringen oder nicht (ich würde das
hineininterpretieren wollen.. imperial quatsch ist eben das... QUATSCH!)
egal.. interessanter wäre mir die Frage hier,
will man da dezimale inch Anzeige (was leicht wär)
oder will man auch diesen Bruchteil Kokolores,
oder schlimmer noch Mixed
4 1/4" + 0.0807 (oder wie wir sagen würden... 11cm ;))
'sid
sid schrieb:> da steht doch "nach dem drücken" also danach!
Aber da steht eben überhaupt nichts von "Loslassen".
Deshalb kann man es so implementieren, wie du es willst, oder auch
anders. Beide Lösungen genügen dieser Anforderung vollauf.
Das ist der Witz am Pflichtenheft, da hat schon mancher überrascht
geguckt.
sid schrieb:> oder will man auch diesen Bruchteil Kokolores
Den verwenden sogar die Zolligen selber nicht mehr. In Datenblättern
werden ż. B. 100mm immer als 3,937" angegeben.
Lothar M. schrieb:> Den verwenden sogar die Zolligen selber nicht mehr. In Datenblättern> werden ż. B. 100mm immer als 3,937" angegeben.
Dann frag mal in einem Werkzeugladen nach einem Alan Key mit 0.1875" ;-)
Lothar M. schrieb:> sid schrieb:>> oder will man auch diesen Bruchteil Kokolores> Den verwenden sogar die Zolligen selber nicht mehr. In Datenblättern> werden ż. B. 100mm immer als 3,937" angegeben
Na ja, als Ganzzahl + Bruch + Nachkommastellen nicht, hab iich auch nur
1x in meinem Leben gesehen, aber Brüche verwenden die gerne, ob zöllige
Gewinde ( 1 1/2 ) oder unsere 1/8" Bohrer, 1/16" Blechstärke.
"Guten Tag, ich arbeite momentan an einem Projekt für die Schule. "
Hallo,
schon erstaunlich, was heutzutage in der Schule als Stoff angeboten
wird. Früher undenkbar. Es zeigt sich auch deutlich die Diskrepanz
zwischen:
-mal nebenbei mittels Ultraschallsensoren die Distanz ausmessen,
vermutlich durch Anwendung einer vorgefertigten Bibliothek
-zusätzlich eine Taste für eine Umschaltung hinzu zu fügen.
Es zeigt sich, daß noch kein Repertoire zur Lösung einfacher
Programmieraufgaben vorhanden ist. Dies ist um so weniger verwunderlich,
wenn neben den anderen zu bewältigenden Fächern hier noch Zeit und
Geduld in die experimentelle Erforschung eines größeren
Programmierobjektes investiert werden soll.
Die Anleitung zum Mega 32 hat nur 346 Seiten, die man zu Schulzeiten
unter der Bank schon gelesen haben sollte;-)
Ich empfehle noch den Einbau einer Blink-LED, die bestenfalls auf
Tastendruck zu- und abschaltbar sein könnte.
MfG
Wolfgang schrieb:> Dann frag mal in einem Werkzeugladen nach einem Alan Key mit 0.1875" ;-)
Da wird der Verkäufer sowieso die Brauen hochziehen und fragen, ob seine
"Allen Keys" die Arbeit auch verrichten könnten.
Aber abseits der traditionellen Maßangaben bei Werkzeugen, Schrauben,
Rohren,... finden sich diese Dreivierfünftel-Brüche kaum.
WORAUS ermittelt dein schlauer Aufbau die cm?
Um Resourcen zu sparen, machen wir die cm -> inch in
Ganzzahlmathematik:
Die reicht vollkommen bei der Ultraschallgeschichte:
Max 400 cm mit Auflösung von 0,5 cm (? eher 1 cm)
Jedenfalls passt 800 in 2 BYTE = 1 WORD
A) cm (passt in 1 WORD = 2 Byte)
B) Faktor = 25802 (passt in WORD = 2 Byte)
C) mul16_16 = cm x Faktor (ergibt LONG = 4 Byte)
D) inch = mul16_16 / 65536 (ergibt WORD: untere 2 Byte abschneiden)
Das wird dir aber nicht helfen, da du garnicht weißt, was der
Sensor und der µC dabei zu tun haben.
Fazit: Du fällst durch - und das ist auch gut so.
Lothar M. schrieb:> Aber da steht eben überhaupt nichts von "Loslassen".
das ist jetzt aber schon arg kleinlich..
"zum starten des Fahrzeugs drehen sie den Schlüssel"
"Zum manuellen öffnen der Türe bitte Taster drücken"
"Zum kopieren Strg+C drücken, zum einfügen Strg+v"
... da steht nix von loslassen NIE!
Dass man Taster irgendwann wieder loslassen sollte ist ja irgendwie
in Fleisch und Blut bei so ziemlich jedem.
Soweit sogar, dass falls man mal nicht loslassen soll für nenenswerte
Dauer
sich "press and hold" im Erklärtext durchsetzt
oder eben "halte taste xy gedrückt bis<aktion>/für<zeit>"
und DAVON steht da eben auch nichts..
im Gegenteil:
da steht NACH drücken,
"Drücken" ist also vorbei
das impliziert losgelassen, auch sprachlich. ;)
Lothar M. schrieb:> Aber abseits der traditionellen Maßangaben bei Werkzeugen, Schrauben,> Rohren,... finden sich diese Dreivierfünftel-Brüche kaum.
Naja, da haben wir also sehr unterschiedliche Erfahrungen...
in jedem Handwerksvideo auf YT (auch von renomierten Handwerkern, keinen
Hobbyisten - zB Ron Covell) nutzen ihre Freedomunits in Brüchen wo immer
möglich.
Auch alljene die manuelle Drehbänke und Fräsen beackern, nutzen
vorranging Brüche, es sei denn sie gehen über den DRO der die nicht
anzeigen kann
oder nehmen die letzten paar Tausendstel ab;)
(daher kommt ja dieser Mix Mist... 1 3/8" plus paar tausendstel)
Ich hatte zum Glück noch nie das Misvergnügen mit US A-Metrikanern
zusammen Handwerken zu müssen, reicht schon mit ihnen über Masseinheiten
diskutieren zu müssen.
Aber egal.
WORAUS schrieb:> Faktor = 25802
Cool, das ist für den inch-Blödsinn echt nah genug!, danke für den Tipp.
hab ich noch nie drüber nachgedacht, dass das mit ner multiplikation und
shift gehen könnte.
(macht bei mir kaum einen Unterschied -auf nem PC klappt das mit der
division ja ausreichend schnell-, ist aber 'nice to know' man weiss ja
nie wann man das mal brauchen könnte)
'sid
sid schrieb:> hab ich noch nie drüber nachgedacht, dass das mit ner multiplikation und> shift gehen könnte.
Eine Division durch eine Konstante geht immer mit einer Multiplikation
und einem Shift. Nur wird für hinreichende Genauigkeit evtl. der
Integer zu kurz, weil der Binärfaktor zu groß wird. In FPGAs, wo ich die
Wortbreite ja beliebig gestalten kann mit z.B. 27 bit oder auch 111 Bit,
geht das recht elegant.
Und dort muss dann auch keine "Bytegrenze" für einen "optimalen Shift"
eingehalten werden, weil in Hardware ein Shift nur ein "Nichtverdrahten
von unteren Bits" ist.
Aber ich würde da sowieso nicht mit dem zurechtgerundeten "cm"-Wert
rechnen, sondern einfach gleich dort ansetzen, wo der Anzeigewert aus
dem Zählerwert berechnet wird:
1
if(modus)count_a=pulse/147;// modus != 0 -> inch (hier gilt 147 = 58*2,54)
2
elsecount_a=pulse/58;// modus == 0 -> cm (58 dürfte ja schon funktionieren)
Und jetzt muss man nur noch "modus" mit 0 oder 1 beschreiben und man
bekommt das Ergebnis in ganzzahligen(!!) inch oder in cm angezeigt.
sid schrieb:> Naja, da haben wir also sehr unterschiedliche Erfahrungen...> Handwerksvideo auf YT ... manuelle Drehbänke und Fräsen beackern
Ja, ich bin da eher industriell unterwegs. Und in die Tabellen auf den
Prozessrechnern werden Abmessungen immer in x,y" eingegeben.
sid schrieb:> das ist jetzt aber schon arg kleinlich..
Das nennt sich "Ausnutzen der Freiheitsgrade".
> Dass man Taster irgendwann wieder loslassen sollte ist ja irgendwie> in Fleisch und Blut bei so ziemlich jedem.
Das geht sogar soweit, dass so mache Software erst reagiert, wenn man
die Taste loslässt, obwohl da dick und fett steht, dass man die Taste
drücken müsse.
steffi schrieb:> Code bis jetzt
Woher kommt der? Wurde der vorgefertigt und getestet bereitgestellt?
Wieso gibst Du nicht die Quelle "Deiner Entwicklung" preis:
https://electrosome.com/ultrasonic-distance-sensor-atmega32/
?
Hat Dir Dein Post bei den AVR-Freaks etwas eingebracht?
Ich mag es nicht, wenn andere sich mit fremden Federn schmücken "und
dann nur noch nach Details fragen".
sid schrieb:> das ist jetzt aber schon arg kleinlich..> "zum starten des Fahrzeugs drehen sie den Schlüssel"> "Zum manuellen öffnen der Türe bitte Taster drücken"> "Zum kopieren Strg+C drücken, zum einfügen Strg+v"> ... da steht nix von loslassen NIE!> Dass man Taster irgendwann wieder loslassen sollte ist ja irgendwie> in Fleisch und Blut bei so ziemlich jedem.
aber das reicht nun mal nicht um dem Computer zu erklären was wann
geschehen soll!
Wenn also
steffi schrieb:> nach dem drücken soll der Abstand in Inch angezeigt> werden
dann sollte man das schon mal differenzieren zur Beschreibung:
nach dem Drücken kann heissen, sofort auf Druck passiert was!
nach dem Drücken kann aber auch heissen, sofort auf Loslassen passiert
was!
Deswegen haben Juristen nie Arbeitsmangel!
Techniker wollen es genauer!
Joachim B. schrieb:> dann sollte man das schon mal differenzieren zur Beschreibung:> nach dem Drücken kann heissen, sofort auf Druck passiert was!> nach dem Drücken kann aber auch heissen, sofort auf Loslassen passiert was!
Und es kann heißen, dass sowohl beim Drücken wie auch beim Loslassen was
passiert. So wie bei der Haustürklingel, die sofort nach dem Drücken mit
dem Klingeln beginnt und sofort nach dem Loslassen wieder aufhört.
Oder so wie das Dämpferpedal beim Keyboard oder bei der Lichthupe oder
oder oder.
Joachim B. schrieb:> Techniker wollen es genauer!
Techniker machen das, was der Auftraggeber geschrieben hat. Nur der
Auftraggeber will es anders(**). Und ...
> Deswegen haben Juristen nie Arbeitsmangel!
(**) Wie die Zeitschaltuhr im Backofen: man stellt die Abschaltzeit
ein. Und dann noch, wie lange der Ofen vorher zu laufen hat. Ich
bekomme da immer einen Knoten ins Hirn. Für eine Hausfrau ist die
Programmierung ganz logisch: der leckere Auflauf braucht eineinviertel
Stunden und um 12 kommt die ganze Bande an den Tisch, da muss er fertig
sein.