Hallo erstmal, ich verwende folgenen Mikrocontroller: ATMEGA16 16PU ( http://www.gotronik.pl/zestawyuruchomieniowe/avr_atmega_development_board.html ) Ich will diesen mit C# verwenden. Ich habe folgendes Problem ich weiß nicht wie ich in C den Mikrocontroller soansprechen kann, dass wenn ich einen Button drücke, eine entsprechende LED angeht. Die Button sind mit "PORT A" verbunden. Und die LEDS mit "PORT B". Ich kann die Button nicht direkt mit den LEDs verbinden, da ich die gesteckte Weise für mein C# Programm benötige. Ich habe folgende Bibliotheken bereits eingebunden: #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "mega_lcd.c" #include "v24_poll.c" Würde mich freuen, wenn ich einen Ansatzpunkt oder ähnliches bekommen würde, um dies zu bewältigen. Ich weiß, dass das nicht viel sein sollte, aber leider bin ich noch ein Anfänger in diesem Gebiet. Ich könnte mir vorstellen das mit einer if-Anweisung zu machen, doch wie Spreche ich die Sachen zusammen an? Bitte helft Danke schonmal Falls noch fragen bestehen, bleibe heute on.
> Ansatzpunkt AVR-GCC-Tutorial speziell "12. Zugriff auf IO-Ports" > Ich will diesen mit C# verwenden. Auf dem Atmega16 C#? No way!
Button ... am Computer in einem Programm? Oder 'n Taster? Gramattik kann manchmal die Lesbarkeit erhöhen ... manchmal. Entweder musst du jetzt mal deine Schaltung präsentieren oder nochmal sagen, was du eigentlich machen wolltest. Ich kann es mir so leider nicht ganz vorstellen.
Wenn du mit C# ("C-Sharp") ein Programm schreiben willst, das LEDs am Mikrocontroller an und aus macht, dann informiere dich über UART auf dem Mikrocontroller und "SerialPort" in C#. Wenn du Taster hast (also die realen Dinger) und willst durch druck auf selbige LEDs an oder aus schalten, dann informiere dich über die IO-Grundlagen im Tutorial. Wenn du den Mikrocontroller programmierst ist C# ungeeignet. Dann ist das ein fall für C. Hierzu bietet sich AVR-Gcc an, was im gleichnamigen Tutorial besprochen wird.
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | #include <borddef.h> |
4 | |
5 | |
6 | int main(void){ |
7 | |
8 | |
9 | |
10 | LEDPORT = 0xff; |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | DDRD = 0xff; //Ausgang definieren (LED) |
22 | |
23 | DDRC = 0x00; //Eingang definieren (Taster) |
24 | SCHPORT= 0xff; //internen Pull-Up-Widerstand einschalten |
25 | |
26 | while(1){ |
27 | SCHPORT= 0xff; |
28 | |
29 | if (bit_is_clear(PINC,0)) |
30 | {LEDPORT &=~ LED0 ;} //LED an |
31 | else
|
32 | {LEDPORT |= LED0;} //LED aus |
33 | |
34 | if (bit_is_clear(PINC,1)) |
35 | {LEDPORT &=~ LED1;} //LED an |
36 | else
|
37 | {LEDPORT |= LED1;} //LED aus |
38 | |
39 | if (bit_is_clear(PINC,2)) |
40 | {LEDPORT &=~ LED2 ;} //LED an |
41 | else
|
42 | {LEDPORT |= LED2;} //LED aus |
43 | |
44 | if (bit_is_clear(PINC,3)) |
45 | {LEDPORT &=~ LED3;} //LED an |
46 | else
|
47 | {LEDPORT |= LED3;} //LED aus |
48 | |
49 | if (bit_is_clear(PINC,4)) |
50 | {LEDPORT &=~ LED4 ;} //LED an |
51 | else
|
52 | {LEDPORT |= LED4;} //LED aus |
53 | |
54 | if (bit_is_clear(PINC,5)) |
55 | {LEDPORT &=~ LED5;} //LED an |
56 | else
|
57 | {LEDPORT |= LED5;} //LED aus |
58 | |
59 | if (bit_is_clear(PINC,6)) |
60 | {LEDPORT &=~ LED6 ;} //LED an |
61 | else
|
62 | {LEDPORT |= LED6;} //LED aus |
63 | |
64 | if (bit_is_clear(PINC,7)) |
65 | {LEDPORT &=~ LED7;} //LED an |
66 | else
|
67 | {LEDPORT |= LED7;} //LED aus |
68 | }
|
69 | |
70 | return(0); |
71 | }
|
dazu noch die borddef, die du natürlich auf dein Board anpassen müsstest
1 | #define PORT_LED PORTD
|
2 | |
3 | #define LED0 (1<<0)
|
4 | |
5 | #define LED1 (1<<1)
|
6 | |
7 | #define LED2 (1<<2)
|
8 | #define LED3 (1<<3)
|
9 | #define LED4 (1<<4)
|
10 | #define LED5 (1<<5)
|
11 | #define LED6 (1<<6)
|
12 | #define LED7 (1<<7)
|
13 | |
14 | |
15 | #define PORT_SCH PORTC
|
16 | |
17 | #define SCH0 (1<<0)
|
18 | |
19 | #define SCH1 (1<<1)
|
20 | |
21 | #define SCH2 (1<<2)
|
22 | #define SCH3 (1<<3)
|
23 | #define SCH4 (1<<4)
|
24 | #define SCH5 (1<<5)
|
25 | #define SCH6 (1<<6)
|
26 | #define SCH7 (1<<7)
|
Also ich schaffe das in 9 Zeilen:
1 | #include <avr/io.h> |
2 | |
3 | int main(void){ |
4 | |
5 | DDRD = 0xff; //Ausgang definieren (LED) |
6 | PORTC = 0xff; //internen Pull-Up-Widerstand einschalten |
7 | |
8 | while(1){ |
9 | PORTD = PINC; |
10 | } |
11 | |
12 | return(0); |
13 | } |
Hallo erstmal, ich verwende folgenen Mikrocontroller: ATMEGA16 16PU ( http://www.gotronik.pl/zestawyuruchomieniowe/avr_a... ) Ich habe folgendes Problem ich weiß nicht wie ich in C den Mikrocontroller soansprechen kann, dass wenn ich einen Button(auf dem Board) drücke, eine entsprechende LED angeht. Die Button sind mit "PORT A" verbunden. Und die LEDS mit "PORT B". Ich kann die Button nicht direkt mit den LEDs verbinden, da ich die gesteckte Weise für mein C# Programm benötige (Ich habe mit C# ein Server-Client gebastelt, wo mir auf dem Bildschirm angezeigt wird, wo ich welchen button drücke) . Ich habe folgende Bibliotheken bereits eingebunden: #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "mega_lcd.c" #include "v24_poll.c" Würde mich freuen, wenn ich einen Ansatzpunkt oder ähnliches bekommen würde, um dies zu bewältigen. Ich weiß, dass das nicht viel sein sollte, aber leider bin ich noch ein Anfänger in diesem Gebiet. Ich könnte mir vorstellen das mit einer if-Anweisung zu machen, doch wie Spreche ich die Sachen zusammen an? Bitte helft Danke schonmal Falls noch fragen bestehen, bleibe heute on. P.s. Ich weiß das ich mit PORTA = 0xff meine Ports freischalte. Ich weiß nur nicht wie ich PORT A und PORT B, jeden einzelnen Stick so verbinde, dass wenn ich Button 7 (auf dem Mikrocontroller) drücke die LED 7 auch angeht.
Hi Und was gefällt dir an der Variante: Beitrag "Re: Mikrocontroller (wenn Button geklickt wird, soll eine LED angehen)." nicht?
Danke für eure Antworten. An spess53: Es ging mir nicht darum eine richtige Antwort zubekommen, sondern es zu verstehen. So dass ich das nachvollziehen kann und eure Hilfe irgendwann nicht mehr brauche. Hab es jetzt halbwegs hinbekommen. Trotzdem Danke
Hi
>Hab es jetzt halbwegs hinbekommen.
Und ganz verstanden?
MfG Spess
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.