Mikrocontroller (wenn Button geklickt wird, soll eine LED angehen).

Gast #2121993
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.
Gast #2122001
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.
Gast #2122005
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.
Gast #2122061
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)
Gast #2122252
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.
Gast #2122361
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren