LED auf Knopfdruck leuchten lassen in C

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 18 4 2024  10:14:30      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Gehe zu Seite ( 1 | 2 Nächste Seite )      


Autor
LED auf Knopfdruck leuchten lassen in C
Suche nach: led (32423)

    







BID = 870147

basti2s

Gelegenheitsposter



Beiträge: 94
Wohnort: Leutkirch
 

  


Hallo,

ich werde hier noch wahnsinnig. Ich habe das PICKit2 mit dem Low Pin Count demo Board. Ich programmiere in C mit MPLAB auf dem PIC16F690
Ich möchte ledeglich die LEDs leuchten lassen, wenn ich den Taster drücke. Hier mal mein Programm:

void main ()
{
TRISC = 0; //Port C als Ausgang
TRISA3 = 1; //RA3 als Eingang (Taster)
int i= 0;


if (RA3)
{
for(i=0; i<1;i++);
PORTC = 0b1111111;
}
else
{
PORTC = 0b0000000;

}

was mache ich falsch?


BID = 870150

Offroad GTI

Urgestein



Beiträge: 12656
Wohnort: Cottbus

 

  

Was hat denn die Schleife da drin verloren?
Die Definition i<1 ist auch nicht gerade sinnvoll, da dies für i=0 (also die Anfangsbedingung) immer wahr ist, und die Schleife damit sofort wieder beendet wird.



_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.

BID = 870233

basti2s

Gelegenheitsposter



Beiträge: 94
Wohnort: Leutkirch

Danke für deine schnelle Antwort, hab das Programm geändert, funktioniert aber immer noch nicht.

void main ()
{
TRISC = 0;
TRISA3 = 1;



if (RA3)
{
PORTC = 0b1111111;
}
else
{
PORTC = 0b0000000;

}



}

BID = 870237

Offroad GTI

Urgestein



Beiträge: 12656
Wohnort: Cottbus

DonComi hat mir auch schon mal bei diesem Problem geholfen, das Ergebnis sah da dann so aus (ist allerdings für einen ATtiny):


Code :

#include <avr/io.h>


#define S1 (PINB&(1<<PINB3))
#define LED1 PORTB, PORTB7
#define setbit(IO) __setbit(IO)
#define __setbit(PORT, BIT) PORT |= (1<<BIT)
#define clearbit(IO) __clearbit(IO)
#define __clearbit(PORT, BIT) PORT &=~ (1<<BIT)

int main (void)

{
DDRB = 0xFF; //PortB Ausgang
PORTB = 0x00; //Alle PullUp-Widerstände aus

do
{
if(S1) setbit(LED1);
else clearbit(LED1);
}while(1);

return 1;
}




_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.

BID = 870380

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika



Code :

if (RA3)

{
PORTC = 0b1111111;
}
else
{
PORTC = 0b0000000;

}



Wie soll das mit diesem Code denn überhaupt funktionieren??

Der Code muss zyklisch immer Folgendes tun: Er muss abfragen, ob der Taster gedrückt ist, und wenn ja, dann schaltet er halt die LED an, sonst nicht; Pseudocode
while(1)
{
 if(TASTERPORT & (1<<TASTENBIT))
 {
   LEDPORT |= 1<<LEDBIT;
 }
 else
 {
   LEDPORT &= ~(1<<LEDBIT);
 }
}



Dabei gehe ich davon aus, dass der Taster den entsprechenden IO-Pin auf 1 setzt, wenn der gedrückt wird und die LED mit einer 1 angeschaltet wird.

"Richtiges" C kennt übrigens keine Binärzahlen (0b11101111 oder so) nicht!
Sowas macht man auch nicht! Programmierer denken hexadezimal, und dort sieht man z.B. auch sofort, welche Bits gesetzt sind und welche nicht.

Da ich mich mit PICs nicht auskenne nur soviel.
Ob du die Hardware überhaupt richtig anspricht, kann ich daher nicht sagen.


_________________

BID = 870412

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
TRISA3 = 1; //RA3 als Eingang (Taster)
Was hängt denn da hardwaremäßig dran?
Vielleicht ändert sich der Zustand des Pins überhaupt nicht, wenn du den Taster betätigst.
Dabei auch berücksichtigen, ob die eingebauten Pull-up-Widerstände ein- oder ausgeschaltet sind.


P.S.:
Zitat :
was mache ich falsch?
Die Frage ist falsch gestellt, sondern sie müsste lauten "was mache ich (oder der Prozessor) danach?"
In der Praxis schmiert er vermutlich ab, d.h. er rast durch den Speicher in welchem anstatt eines sinnvollen Programmcodes irgend ein binärer Müll steht und schliesslich hängt er irgendwo in einer Endlosschleife fest.
Wie es richtig geht, hat DonComi ja bereits geschrieben.



[ Diese Nachricht wurde geändert von: perl am 26 Jan 2013 18:52 ]

BID = 870571

basti2s

Gelegenheitsposter



Beiträge: 94
Wohnort: Leutkirch

Also inzwischen schaut mein Programm wie so aus:

void main ()
{
TRISC = 0;
ANSEL =0;

while (1)
if (RA3)
{
PORTC = 0b1111111;
}
else
{
PORTC = 0b0000000;
}


}

Funktioniert aber immer noch nicht.

Hier ist das Datenblatt meiner Platine, auf Seite 12 sieht man wie der Taster mit dem PIC verbunden ist.
Von den internen Pulldown Widerständen höre ich zum ersten mal etwas. Wie schalte ich die denn ein bzw. aus?

BID = 870576

Offroad GTI

Urgestein



Beiträge: 12656
Wohnort: Cottbus


Zitat :
Von den internen Pulldown Widerständen höre ich zum ersten mal etwas.
Das sind Pullup-Widerstände, weil sie nach Vcc (also "nach oben") geschaltet werden.

Schau dich doch mal hier um: http://www.sprut.de/electronic/pic/grund/grund.htm

Edit: Du kannst nicht einfach if(RAx) sagen, du musst zumindest erst mal definieren, dass dies ein Eingang sein soll.


_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.

[ Diese Nachricht wurde geändert von: Offroad GTI am 27 Jan 2013  9:47 ]

BID = 870584

basti2s

Gelegenheitsposter



Beiträge: 94
Wohnort: Leutkirch

RA3 ist immer als Eingang geschalten, steht in der Beschreibung drinnen.

BID = 870585

Ltof

Inventar



Beiträge: 9268
Wohnort: Hommingberg

Hast Du den externen Reset deaktiviert?

_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)

BID = 870587

basti2s

Gelegenheitsposter



Beiträge: 94
Wohnort: Leutkirch

Nicht dass ich wüsste, wie kann ich den deaktivieren?

BID = 870589

Ltof

Inventar



Beiträge: 9268
Wohnort: Hommingberg

Keine Ahnaung wie das in C geht. Der Taster hängt nicht nur an RA3, sondern kann auch Reset sein - je nach Konfiguration.

_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)

BID = 870607

basti2s

Gelegenheitsposter



Beiträge: 94
Wohnort: Leutkirch

Habe gerade den vermutlichen Fehler gefunden. Wenn das PICKit an der Platine Steckt, kann der Port RA3 nicht funktionieren, habe ich in einem Forum gelesen.

Nun will ich einfach einen anderen PIN für den Taster verwenden. Wie Schließe ich denn extern einen Taster an? einfach die +5V auf den Pin legen, oder sollte ich zur Sicherheit einen Vorwiederstand verwenden?

BID = 870608

Offroad GTI

Urgestein



Beiträge: 12656
Wohnort: Cottbus

Das sind "Spannungseingänge", brauchen also keinen Widerstand. Den brauchst du nur, um den Eingang auf ein definiertes Potential zu ziehen, wenn der Taster nicht gedrückt ist.
Also Pullup/Pulldown Widerstände (wobei ersterer auch intern im µC zugeschaltet werden kann)



_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.

BID = 870627

Ltof

Inventar



Beiträge: 9268
Wohnort: Hommingberg


Zitat :
basti2s hat am 27 Jan 2013 12:07 geschrieben :

Habe gerade den vermutlichen Fehler gefunden. Wenn das PICKit an der Platine Steckt, kann der Port RA3 nicht funktionieren, habe ich in einem Forum gelesen.

Die Behauptung ist falsch.

Vernünftig konfigurieren!

Lies Dich erst mal ein:
http://www.sprut.de/electronic/pic/config/config.htm

http://www.holger-klabunde.de/pichelp.htm#configurationword

_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)


      Nächste Seite
Gehe zu Seite ( 1 | 2 Nächste Seite )
Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 24 Beiträge im Durchschnitt pro Tag       heute wurden bisher 2 Beiträge verfasst
© x sparkkelsputz        Besucher : 180917154   Heute : 2049    Gestern : 9237    Online : 662        18.4.2024    10:14
6 Besucher in den letzten 60 Sekunden        alle 10.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0388839244843