Hallo, eine frage: Kann ich per integer eine Variable erstellen, die dann beispielsweise bei Tastendruck +1 zählt? Und wie genau würdde man sowas realisieren? Also ich hab Varialbe Zähler, int Zaehler; kann ich dann einfach sagen, wenn pin1 = 1 dann Zaehler + 1... Wie genau definiert man das beim Mikrocontroller programmieren, ich komme vom c vom PC. Danke
Variable anlegen und hochzählen ist ja genau so wie unter C am PC. Du hast halt kein Betriebssystem und musst dich um alle Details der Hardware selbst kümmern. Da hilft eigentlich nur Tutorial durcharbeiten und Datenblätter lesen. Und Erfahrung.
unsigned char int8_t, wird die Variable dann einfach dahintergeschireben? Hätte einer hier mal kurz ein kopiertes Codebeispiel irgendwo parat, wo ich mich hochhangeln könnte, um den Ablauf zu verstehen? Danke
Du musst dich zunächst um Oszillator/Quarz kümmern. Dann musst du den Pin auf Eingang schalten. Eventuell auch noch Analog-Digital-Wandler oder sonst was abschalten... Dann musst du dich um das Tastenpürellen kümmern... Das wird kein Codeshnipsel. Auf einem MC wird das ein ausgewachsenes Tutorial.
Noch einer schrieb: > Dann musst du dich um das Tastenpürellen > kümmern... Nicht die Tasten pürieren... ;-) SCNR Paul
Ja, ich weiß, abe rmir geht es nur darum, wie die Variable hier definiert wird und wie sie bspw. bei input=1 hochzählt.. dieses Entprellen etc.. nutzt mir erst mal nichts, hätte einer vielleicht igrnedwas hier?
Paul Baumann schrieb: > Nicht die Tasten pürieren... Hat er ja auch nicht geschrieben. http://www.purell.com/ Also tasten desinfizieren. mfg.
1 | #include <avr/io.h> |
2 | #include <stdint.h> |
3 | #include <util/delay.h> |
4 | |
5 | // Variablen definieren
|
6 | volatile unsigned char Zaehler; // Up/Down-Zähler (0-255) |
7 | |
8 | // --- Hauptprogramm ---
|
9 | int main (void) |
10 | {
|
11 | // Pins definieren
|
12 | DDRB = 0xff; // PortB (0-7) als Ausgang definieren (LEDs) |
13 | |
14 | if(ermittelterWert > 0) //beispielhaft |
15 | Zaehler = Zaehler+1; |
16 | |
17 | if(Zaehler>10) |
18 | PORTB |= 0x01; |
19 | else
|
20 | PORTB &= ~0x01; |
21 | |
22 | |
23 | }
|
sieht das logisch aus?
Und kann man noch implementieren, dass bei Sekunde = 1 der Zaehler wieder auf 0 geht? Wenn man halt via Timer eine Art Uhr installiert? theoretisch schon, oder?
1 | if(ermittelterWert > 0) //beispielhaft |
2 | Zaehler = Zaehler+1; |
3 | |
4 | if(Zaehler>10) |
5 | PORTB |= 0x01; |
6 | else
|
7 | PORTB &= ~0x01; |
8 | |
9 | if sekunde = 1 |
10 | Zaehler = 0 |
11 | |
12 | ISR(TIMER1_COMPA_vect) |
13 | {
|
14 | millisekunden++; |
15 | if(millisekunden == 1000) |
16 | {
|
17 | sekunde++; |
18 | millisekunden = 0; |
19 | if(sekunde == 60) |
20 | {
|
21 | minute++; |
22 | sekunde = 0; |
23 | }
|
24 | if(minute == 60) |
25 | {
|
26 | stunde++; |
27 | minute = 0; |
28 | }
|
29 | if(stunde == 24) |
30 | {
|
31 | stunde = 0; |
32 | }
|
33 | }
|
34 | }
|
Müsste so gehen aber es muss heißen: If (sekunde == 0) Und ich glaube du brauchst verschiede Namen für die Zähler-Sekunden und die Uhr-Sehunden. Sons zählt deine uhr nur bis eine Sekunde und setzt sich zurück.
... schrieb: > Und kann man noch implementieren, dass bei Sekunde = 1 der Zaehler > wieder auf 0 geht? Ja. > Wenn man halt via Timer eine Art Uhr installiert? theoretisch schon, oder? Sofern die Timer-ISR alle ms aufgerufen wird, ist das eine Uhr. Ja, das macht man praktisch so. mfg.
Lochrasterer schrieb: > Sons zählt deine uhr nur bis eine Sekunde und setzt > sich zurück. Wieso das? ich sehe nur: wenn sekunde 1, dann mach zaehler 0. die sekunde wird ja nicht angegriffen sondern nur aufgegriffen..
... schrieb: > Wieso das? ich sehe nur: wenn sekunde 1, dann mach zaehler 0. > die sekunde wird ja nicht angegriffen sondern nur aufgegriffen. Das passt schon. mfg
Oh. Sorry. Klar. Passt so. Ich dachte sekunde wird dann wieder auf null gesetzt. Hab mich verlesen. I'm sorry. MFG Lochrasterer
Vielen Dank erstmal, dann noch eine Frage: Kann ich mit einem Mikrocontroller ein Signal (analog) an den PC übertragen? Also ich kriege via input ein signal an den µC und dieses Signal soll dann am PC sichtbar gemacht werden. Gibt es da Lösungen? MFG
analog? wahrscheinlich gar nicht. Schau mal nach RS232 und UART. Dafür gibt es ein Tutorial hier. Wenn dein PC eine RS232 Schnittstelle hat, brauchst du einen "MAX232" von MAXIM um den Spannunglevel-Unterschied von RS232 und AVR auszugleichen. Wenn du nur USB hast, brauchst du einen "FT232RL" von FTDI. Der simuliert eine RS232-Schnittstelle. Schau mal nach "USB to Serial - Converter" Dazu braucht du allerdings keinen MAX, da es schon 5V sind. MFG Lochrasterer
Am PC brauchst du dann sowas wie das Hyperterminal. Schau mal nach der kostenlosen Software "HTerm". Hab ich benutzt als ich noch Windows hatte.
Läuft das damit? http://www.reichelt.de/USB-Messlabor-A-D-Messkarten/DES-8-12-USB/3/index.html?&ACTION=3&LA=2&ARTICLE=77898&GROUPID=4051&artnr=DES+8-12+USB Sieht mir zu simpel aus...
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.