Forum: Mikrocontroller und Digitale Elektronik Erste Versuche mit dem Entwicklungsboard MikroElektronika EasyPIC v7


von Da Mo (Gast)


Lesenswert?

Nachdem ich bereits die LED's der verschiedenen Ports ansprechen und 
verschiedene Spielereien anstellen kann, würde ich jetzt gerne die 
Taster verwenden.

Wer kann mir ein Beispiel geben, damit ich das Prinzip dahinter 
verstehe?

Wie kann ich zum Beispiel mit einem Taster von Port E die LED's des Port 
C ansprechen?

DANKE!!!

von Stefan (Gast)


Lesenswert?

Welcher µC ?
Welche Programmiersprache ?
Welcher Compiler ?

Fragen über Fragen.

von Da Mo (Gast)


Lesenswert?

Welcher µC ? => PIC18F45K22
Welche Programmiersprache ? => C
Welcher Compiler ? => mikroC

von Stefan (Gast)


Lesenswert?

Mit dem TRIS Register den Port auf Eingang setzen.
Dann mit LAT Register den Port abfragen, wo der Schalter
dran ist. Im Programm dann das LAT Register setzen wenn der
Eingang high ist, wo deine LED dran ist.

von Da Mo (Gast)


Lesenswert?

Wie muss ich das umsetzen?

"Dann mit LAT Register den Port abfragen, wo der Schalter
dran ist."

von Stefan (Gast)


Lesenswert?

Z.B. in LATA.1 steht ob der Port A1, Null oder Eins ist.
Also ob Taster gedrückt ist oder nicht.
Lies dir das Datenblatt des µC zu den Registern durch, da
steht alles drin.

von Da Mo (Gast)


Lesenswert?

Das werde ich am Nachmittag, wenn ich mehr Zeit habe machen.

Kann ich einen Taster nicht einfach mit

if((Taster0 & 0x01) == 1)
{
 ...
}

abfragen?

von Stefan (Gast)


Lesenswert?

Was ist Taster0 ?
Du mußt dich schon an die Befehle des µC
halten. Du kannst natürlich sie neu definieren und
selber namen geben. Das muß aber im Programm gemacht werden.

von Da Mo (Gast)


Lesenswert?

RE0

von Stefan (Gast)


Lesenswert?

Oder einfach
if LATE.0 = 1 then
LATC.0 = 1
end if

von Ro R. (rond_es)


Lesenswert?

Hast du dir schon die Beispiele angeschaut? Download examples, mitte 
website, links: 
http://www.mikroe.com/eng/products/view/757/easypic-v7-development-system/

von Da Mo (Gast)


Lesenswert?

Bei diesem Code, handelt es sich aber nicht mehr um reines C oder?

if LATE.0 = 1 then
LATC.0 = 1
end if

Ich möchte mich noch nicht zu weit von den 0815 Codes weg bewegen.

von Oliver J. (skriptkiddy)


Lesenswert?

Do Ma schrieb:
> Bei diesem Code, handelt es sich aber nicht mehr um reines C oder?

Sieht wie Basic aus.

von Stefan (Gast)


Lesenswert?

Die Beispiele werden mit installiert wenn der Compiler
installiert wird. Ja ist MBasic aber ist in C fast das selbe.
Die Befehle des µC bleiben auch in C die selben.

von Da Mo (Gast)


Lesenswert?

Leider kann ich mit

if LATE.0 = 1 then
LATC.0 = 1
end if

nichts anfangen.

In C sollte es wohl

if(LATE.0 == 1)
{
 LATC.0 = 1;
}

heißen.

Das funktioniert aber so nicht.

von Stefan (Gast)


Lesenswert?

Die Ports als Eingang und Ausgang gesetzt ?

von Da Mo (Gast)


Lesenswert?

TRISC = 0x00;
TRISE = 0x07;

???

Die Fehlermeldungen:

9 406 ')' expected, but '.0' found
9 315 Invalid expression
9 402 ; expected, but ')'
11 424 '}' expected ';'
12 312 Internal error ''
0 102 Finished (with errors): 07 Jän 2012, 14:19:53

von Oliver J. (skriptkiddy)


Lesenswert?

Man liest über die LATx Register blos das zurück, was man in das 
Output-Latch herein geschrieben hat. Wenn man aber die Pinzustände 
einlesen möchte, dann muss man laut Datenblatt das entsprechende 
PORT-Register verwenden.

Gruß Oliver

von Stefan (Gast)


Lesenswert?

Ja richtig. Mußt um den Taster ab zu fragen,
das PORT Register nehmen. Also,
If PORTE.0 = 1 then usw.
Und du mußt die Ports auf digital setzten.
Dafür ist das Ansel Register zuständig.

von Da Mo (Gast)


Lesenswert?

Danke für eure Antworten!

Ich habe mir das einfacher vorgestellt*gg*.

von Stefan (Gast)


Lesenswert?

Der µC ist für den Anfang auch nicht gerade einfach.
Aber schau dir die Demos mal an und mach dich
vertraut, mit dem Datenblatt. Da steht eigentlich
alles drin. Ansonsten üben üben üben.
Und wenn fragen sind, dann immer fragen.
Hier kann man auch mal vorbei schauen, da es für PIC ist.

http://pic-projekte.de/phpBB3/

von Da Mo (Gast)


Lesenswert?

Kann mir bitte jemand in kurzen und einfachen Sätzen, die zwei 
if-Bedingungen aus der do-while-Schleife aus dem unten stehenden 
Quelltext erklären?
1
bit oldstate;                                    // Old state flag
2
3
void main() {
4
5
  ANSELB = 0;                                    // Configure PORTB pins as digital
6
  ANSELC = 0;                                    // Configure PORTC pins as digital
7
8
  TRISB0_bit = 1;                                // set RB0 pin as input
9
  
10
  TRISC = 0x00;                                  // Configure PORTC as output
11
  LATC = 0xAA;                                   // Initial PORTC value
12
  
13
  oldstate = 0;
14
  
15
  do {
16
    if (Button(&PORTB, 0, 1, 1)) {               // Detect logical one
17
      oldstate = 1;                              // Update flag
18
    }
19
    if (oldstate && Button(&PORTB, 0, 1, 0)) {   // Detect one-to-zero transition
20
      LATC = ~LATC;                              // Invert PORTC
21
      oldstate = 0;                              // Update flag
22
    }
23
  } while(1);                                    // Endless loop
24
}

von Stefan (Gast)


Lesenswert?

if (Button(&PORTB, 0, 1, 1)) {
Wenn der Port B0 für 1ms high ist, wird
oldstate = 1;
auf 1 gesetzt.

if (oldstate && Button(&PORTB, 0, 1, 0)) {
Wenn der Port B0 auf low gesetzt wird für 1ms, dann wird
der rest ausgeführt. Also LED setzten.

Siehe dazu auch die Hilfe des Compilers. Da
steht es auch nochmal beschrieben.

von Da Mo (Gast)


Lesenswert?

Also ist Button() eine Funktion und 0, 1, 1 die Parameter!?

DANKE!

von Stefan (Gast)


Lesenswert?

Ja richtig.
So kann man Tasten entprellen.

von Da Mo (Gast)


Lesenswert?

Eine letzte Frage zu diesem Programm habe ich bitte noch:

Was hat folgende Code-Zeile für einen Sinn. Wenn ich diese 
auskommentiere, verändert sich überhaupt nichts!?
1
TRISB0_bit = 1;                                // set RB0 pin as input

von Stefan (Gast)


Lesenswert?

Setzt den Port B0 auf Eingang.

von Da Mo (Gast)


Lesenswert?

Das steht als Kommentar nebenbei aber es passiert nichts, wenn man es 
deaktiviert!?

von Stefan (Gast)


Lesenswert?

Was meinst du mit deaktivieren ?
Was änderst du und wie ?

von Da Mo (Gast)


Lesenswert?

1
// TRISB0_bit = 1;                                // set RB0 pin as input

von Stefan (Gast)


Lesenswert?

Wenn man diesen µC startet, dann sind seine Ports
als Eingang geschaltet. Da man aber nicht immer weis,
wie die µC beim starten ihre Ports haben, setzt man sie
am Anfang eines Programm immer so wie man sie haben will.
Auch wenn es in diesm Falle nicht nötig ist. Deshalb immer
die Ports so setzen wie man sie braucht dann kann auch nix schief
gehen. Besonders wenn man es auf einen anderen µC laufen
lassen will, bekäme man dann schwierigkeiten mit dem Programm.
Da können die Ports plötzlich als Ausgang definiert beim Starten sein.

von Da Mo (Gast)


Lesenswert?

Das mache ich also mit TRISB0_bit = 1;

Vielen DANK für die super Hilfe!!!

von Stefan (Gast)


Lesenswert?

Ja für diesen µC. Bei einer anderen µC Familie,
kann es anders sein. (12F,16F,18F usw.)
Aber steht auch im Datenblatt wie es da zu Hand
haben ist.

von Carsten (Gast)


Lesenswert?

Wo gibt es EASYPIC V7 zu kaufen in Deutschland?

Ich will nicht per PayPal, Union Western, Kreditkarte bezahlen.

von Erich (Gast)


Lesenswert?

Du gibst einfach deine Frage
>Wo gibt es EASYPIC V7 zu kaufen in Deutschland?
in GOOGLE ein.

Dann landest du bei 3. angezeigten Treffer hier 
Beitrag "Entwicklungsboard"

und erfährtst daß man es da
http://www.zeitech.de/PIC
kaufen kann.

Gruss

von Da Mo (Gast)


Lesenswert?

Ich habe es bei http://www.tigal.com bestellt und es hat super 
funktioniert.

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.