Forum: Mikrocontroller und Digitale Elektronik Anfang Mikrocontroller


von n. n. (menick)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

zunächst einmal ein herzliches Hallo an alle aus dem Forum!

Ich habe gerade angefangen mich mit Mikrocontrollern zu beschäftigen.

Ich fange natürlich erstmal einfach an und werde mich nach und nach 
steigern. Ich hatte vor ca. einem Jahr schonmal mit Mikrocontrollern zu 
tun, allerdings hatte ich hier in Bascom "geschrieben". Jetzt fange ich 
natürlich an  mich gleich mit C zu beschäftigen.

Meinen Aufbau habe ich als Bild angehangen und entsprechend auf einem 
Breadboard aufgebaut, alles in allem funktioniert das ganze gut. Alle 
Taster und LEDs funktionieren, jedoch funktioniert das "C" noch nicht so 
wie das damalig Bascom.

Ich wollte eine ganz einfache if-Abfrage durchführen:

Wenn ich Taster1 drücke, dann LED leuchte bitte...
Mache ich das ganze ohne IF leuchten auch die LEDs.

Könnt ihr mir bitte einen Hinweis geben was ich gerade falsch mache?

Vielen Lieben Dank.
1
/*
2
 * testprog.cpp
3
 *
4
 * Created: ...
5
 *  Author: 
6
 *  Beschreibung: 
7
 *  
8
 */ 
9
10
#ifndef MCU            
11
#define MCU  atmega8
12
#endif
13
14
#ifndef F_CPU          
15
#define F_CPU 1000000UL 
16
#endif
17
18
#include <avr/io.h>
19
#include <avr/interrupt.h>
20
#include <stdlib.h>
21
#include <stdint.h>
22
#include <inttypes.h>
23
#include <util/delay.h>
24
25
// DIE Taster - Port C
26
#define START 5
27
#define NEUSTART 4
28
#define TASTER1 3
29
#define TASTER2 2
30
#define TASTER3 1
31
#define TASTER4 0
32
33
// DIE LEDS - Port B
34
#define LED1 4 //an port B
35
#define LED2 1
36
#define LED3 2
37
#define LED4 3
38
#define GRUEN 5
39
#define BLAU 0
40
41
//Initialisierung
42
void initial(void)
43
{
44
  DDRB = 0b11111111;
45
  DDRC = 0b00000000;
46
}
47
48
int main(void)
49
{
50
initial();
51
52
    if (PINC & (1<<TASTER1) ) 
53
    {      
54
      PORTB |= (1 << LED1) | (1 << LED2);
55
56
      /*
57
      while( 1 ) 
58
      {                
59
      PORTB ^= ( 1 << GRUEN );  // Toggle
60
      _delay_ms(1000);        // Eine Sekunde +/-1/10000 Sekunde warten...
61
      PORTB ^= ( 1 << BLAU );    
62
      }
63
                        */
64
      
65
    }
66
    
67
  return 0;
68
  }

von Dieter M. (Gast)


Lesenswert?

R2 ist Pulldown für alle Eingänge von Port C
-> kann nicht funktionieren
wenn ein Schalter geschlossen ist, liegen alle Eingänge auf High
also einzelne Pulldowns

Noch besser:
Schalter gegen Ground und interne Pullups benutzen

von Obertroll (Gast)


Lesenswert?

Moinmoin!

Dein Code macht folgendes:

Nachgucken, ob Schalter gedrückt ist
Nö -> Programm nach 0.00000001 Sek. schon wieder zuende.

Denk mal scharf nach, was da wohl fehlt...

von n. n. (menick)


Lesenswert?

@Dieter M: werde ich so abändert, ist logisch! Danke


@Obertroll(Gast): Den Code wie folgt bearbeiten
1
 
2
3
while( 1 ) 
4
{
5
    if (PINC & (1<<TASTER1) ) 
6
    {      
7
      PORTB |= (1 << LED1) | (1 << LED2);
8
    
9
    }
10
}

von n. n. (menick)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

hier bin ich nochmal :-).

Erstmal vielen Dank für die bisherigen Hinweise, habe alles umgesetzt 
und der Hardware Aufbau funktioniert auch, anbei auch der entsprechende 
Schaltplan, ich hoffe ich habe soweit alles richtig dargestellt, sollte 
ich Fehler gemacht haben bitte mitteilen, ich werde sofort die 
Änderungen einpflegen! Ich fange ja erst an mit der ganzen Geschichte 
:-).


Was ist mein Ziel mit dem Aufbau:

- wenn Spannung anliegt leuchtet die blaue LED (funktioniert)
- bei betätigen des Start Tasters soll die grüne LED angehen und das 
Hauptprogramm starten (funktioniert)
- alle Taster sowie LEDs funktionieren bereits, es mangelt somit nur an 
der Programmierung.
- einfache schleifen sind auch kein Thema

Wie soll es werden:
- start Taster = grüne LED + nach 2 Sekunden start des eigentlich 
Ablaufs (zeit funktioniert auch)

Der Ablauf:
- 4 rote LEDs sollen immer nach drücken des Starttasters in einer 
zufälligen Sequenz durchlaufen ( nicht zu lange aller höchstens 8 - 10 
Schritte (aufblinken, einzelner LEDs))
- entsprechend der 4 LEDs sind 4 Taster direkt über der jeweiligen LED 
positioniert. Wenn die LED Sequenz durchlaufen wurde, soll die grüne LED 
2x blinken und anschließend muss man die durchlaufene LED Sequenz nach 
drücken mit Hilfe der Taster, macht man einen Fehler muss man von vorn 
anfangen, hat alles geklappt so wird der PIND0 PIND1 am PORTB 
geschaltet.

Ich hoffe ihr könnte mir halbwegs, folgen.

Vielen Dank für eure Unterstützungen.

vg. und schönen Abend

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.