Forum: Mikrocontroller und Digitale Elektronik Mikrocontroller (wenn Button geklickt wird, soll eine LED angehen).


von KC (Gast)


Lesenswert?

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.

von Helfer (Gast)


Lesenswert?

> Ansatzpunkt

AVR-GCC-Tutorial speziell "12. Zugriff auf IO-Ports"

> Ich will diesen mit C# verwenden.

Auf dem Atmega16 C#? No way!

von Testfall (Gast)


Lesenswert?

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.

von Testfall (Gast)


Lesenswert?

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.

von Chris (Gast)


Lesenswert?

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)

von Peter B. (pbuenger)


Lesenswert?

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
}

von KC (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?


von KC (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

Hi

>Hab es jetzt halbwegs hinbekommen.

Und ganz verstanden?

MfG Spess

von KC (Gast)


Lesenswert?

spess53 schrieb:
> Und ganz verstanden?

Ich sag mal so ich hab es halbwegs verstanden.

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
Noch kein Account? Hier anmelden.