Hallo,
Ich hab da ein paar blöde Fragen und zwar programmiere ich mit einem
PicKit 3
auf nem Gemini Board das man auf der Seite ftkl.at nachbauen kann bzw
hat das unsere Schule so in der Richtung nachgebaut und es Funktioniert
soweit auch alles.
Auf dem Board befindet sich ein PIC18F4550
Ich verwende das Board hauptsächlich um das Programmieren zu üben was
mir aber Probleme bereitet sind ein paar Begriffe wie : TRIS, LAT und
PORT
Ich programmiere mit MPLAB und dem C 18 Compiler.
Wir haben zum Beispiel in der Schule mal am PORT D RB/D die LED's von 0
bis 7 angesteuert und leuchten lassen und herumgespielt, dabei versteh
ich aber nicht wirklich den Sinn der oben genannten Begriffe also PORT
is ja eig klar aber zb dass hier:
LATD = 0x00;
TRISD = 0xFE;
was bedeutet das 0x00 oder 0xFE und statt LAT kann ich ja PORT auch
schreiben und ich muss sie ja als input bzw als output festlegen dazu
dient ja das 0x00 aber ich versteh das irgndwie nicht...
In der Schule habn wir das zwar umständlich mit ner while Schleife
gemacht aber so gings halt auch, besser wäre es mit der for gewesen viel
weniger zum schreiben^^:
/****Includes****/
#include <P18F4550.h>
#include <delays.h>
/****Lauflicht****/
void main () {
TRISD= 0x00;
while (1)
{
PORTD= 0x01;
Delay10KTCYx(255);
PORTD= 0x02;
Delay10KTCYx(255);
PORTD= 0x04;
Delay10KTCYx(255);
PORTD= 0x08;
Delay10KTCYx(255);
PORTD= 0x10;
Delay10KTCYx(255);
PORTD= 0x20;
Delay10KTCYx(255);
PORTD= 0x40;
Delay10KTCYx(255);
PORTD= 0x80;
Delay10KTCYx(255);
PORTD= 0x40;
Delay10KTCYx(255);
PORTD= 0x20;
Delay10KTCYx(255);
PORTD= 0x10;
Delay10KTCYx(255);
PORTD= 0x08;
Delay10KTCYx(255);
PORTD= 0x04;
Delay10KTCYx(255);
PORTD= 0x02;
Delay10KTCYx(255);
}
}
Für was steht das ganze 0x08 usw das is ja hex irgndwie ka^^ und hat ja
dan auch was mit der Nummer bzw welches LED leuchtet zu tun oder?
Am besten wäre mal ne Erklärung für TRIS und LAT
Danke schon mal
Thomas schrieb:> Am besten wäre mal ne Erklärung für TRIS und LAT
Hallo Thomas,
TRIS steht für TRI-State und hat im Zusammenhang mit Digital-IO bei
PIC18 folgende Funktion:
Steht ein Bit in einem TRIS-Register auf 1 wie "Input", ist der
korrespondierende Pin als Eingang geschalten. Das Logik-Level an einem
solchen Eingang kannst du aus den dazu gehörenden Port-Registern lesen.
Steht ein TRIS-Bit auf 0 wie "Output", ist der korrespondierende Pin ein
Ausgang. Diese werden ja nicht gelesen sondern aktiv bedient, dazu
verwendet man die LAT-Register. Setzt du ein LAT-Bit auf 1, erhält der
dazu gehörende Pin den Zustand "Hi", bei 0 den Zustand "Low".
Zusammengefasst:
TRISx bestimmt die Richtung. PORTx zeigt Eingänge, LATx setzt Ausgänge
Gruß,
Edson
Also im DATENBLATT (Erste Seite für die I/Os:
> Each port has three registers for its operation. These> registers are:> • TRISx registers (data direction register)> • PORTx registers (reads the levels on the pins of the device)> • LATx registers (output latch)>> The Data Latch (LATx registers) is useful for> read-modify-write operations on the value that the I/O> pins are driving.>> A write operation to the LATx register has the same> affect as a write to the corresponding PORTx register.> A read of the LATx register reads of the values held in> the I/O PORT latches, while a read of the PORTx> register reads the actual I/O pin value.
Es ist NICHT so, dass man zum Ausgänge setzen LATx benutzen MUSS, es
geht auch PORTx.
Und das was in der While steht, ist nichts anderes, als alle Pins
nacheinander auf 1 zu setzen. Geht auch eine 1 zusetzen und dann per
links/rechts-shift das bit zu verschieben.
TRISD = 0xFE;
das 0x steht für das hexadezimale Format von FE. 0b steht für binär.
0xFE = 0b11111110 = 254
also ist D0 als Ausgang geschalten und D1 bis D7 als Eingang.
Thomas schrieb:> Am besten wäre mal ne Erklärung für TRIS und LAT
Das sind Abkürzungen der englischen Begriffe TRISTATE und LATCH. Beide
Begriffe stammen aus der Digital-Elektronik. Ein TRISTATE Logikausgang
ist einer der 3 (THREE - ausgesprochen wie TRI) Zustände annehmen kann:
L, H und hochohmig. Der hochohmige Zustand wird manchmal auch Z oder
einfach "der Dritte" Zustand genannt. Und durch das Setzen eines Bits im
TRI Register schaltest du den IO-Pin der zu diesem Bit gehört in diesen
dritten Zustand. Nur wenn ein IO-Pin sich in diesem dritten Zustand
befindet, kann er als Eingang genutzt werden. Sonst gibt er ja selber
entweder H oder L aus.
Ein LATCH hingegen ist ein digitaler Zwischenspeicher. Der Begriff
deutet auf ein Schaltungsdetail von Computern hin (und ein µC ist ja ein
Computer auf einem Chip).
Der µC hat intern einen Datenbus, der Register, Speicher, IO-Ports und
CPU verbindet. Wenn man jetzt irgendwo ein Bitmuster dauerhaft ausgeben
will, dann verwendet man dazu ein Latch das mit seinen Eingängen am
Datenbus hängt. Dann gibt die CPU die entsprechenden Logikpegel auf den
Datenbus und sendet dem Latch einen Impuls, damit es dieses Bitmuster
speichert. Anschließend kann der Datenbus für die nächste Operation
verwendet werden und das Latch behält die eingespeicherten Daten solange
bis es den nächsten Speicherimpuls bekommt.
Axel S. schrieb:> Das sind Abkürzungen der englischen Begriffe
Naja, Axel, hole lieber nicht zu weit aus.
In diesem Zusammenhang hier sind TRISA, TRISB, LATC, LATD und so weiter
nichts anderes als Hardware-Register, wo man etwas hinein schreiben
kann. Aber der TO hat das Manual überhaupt nicht gelesen, weswegen ihm
derartige Fragen aufkommen.
Aber wenn ich das dann lesen muß:
"Ich verwende das Board hauptsächlich um das Programmieren zu üben was
mir aber Probleme bereitet sind ein paar Begriffe wie : TRIS, LAT und
PORT"
dann kommt mir der Groll hoch. Warum meinen die jungen Leute eigentlich
immer nur eines: zu allererst in die Tasten hauen und wenn was nicht
geht, anderen ein Loch in den Bauch fragen - wo doch ein einziger Blick
in das Manual alles erklärt hätte.
Mit sowas hab ich auch nen Groll im Bauch bei jemandem, der
erklärterweise das Programmieren lernen will, aber offenbar keinerlei
Kenntnis der zu programmierenden Hardware zu erlangen wünscht:
"Ich programmiere mit MPLAB und dem C 18 Compiler."
Mein Rat wäre da:
- einen PIC16 hernehmen
- in Assembler die allerersten Programmierübungen machen
W.S.
W.S. schrieb:> Axel S. schrieb:>> Das sind Abkürzungen der englischen Begriffe>> Naja, Axel, hole lieber nicht zu weit aus.>> In diesem Zusammenhang hier sind TRISA, TRISB, LATC, LATD und so weiter> nichts anderes als Hardware-Register, wo man etwas hinein schreiben> kann. Aber der TO hat das Manual überhaupt nicht gelesen, weswegen ihm> derartige Fragen aufkommen.>> Aber wenn ich das dann lesen muß:>> "Ich verwende das Board hauptsächlich um das Programmieren zu üben was> mir aber Probleme bereitet sind ein paar Begriffe wie : TRIS, LAT und> PORT">> dann kommt mir der Groll hoch. Warum meinen die jungen Leute eigentlich> immer nur eines: zu allererst in die Tasten hauen und wenn was nicht> geht, anderen ein Loch in den Bauch fragen - wo doch ein einziger Blick> in das Manual alles erklärt hätte.
Handbücher und Datenblätter lesen ist schwierig. Wirklich.
Ich verdiene ganz gut daran, Datenblätter zu lesen und zu
interpretieren. Wenn ich ehrlich sein soll, könnte 90% der Elektronik,
die ich entwickle, auch ein Bäckerlehrling entwickeln. Wenn er die
Datenblätter und Handbücher sorgfältig lesen würde. Und das Resultat
wäre um Größenordnungen besser, als die übliche von Halbwissen,
Bauchgefühl und veralteten Daumenregeln geprägte Elektronik einiger
Hardwareentwickler.
Einen Schaltregler beispielsweise kann jedes Kind auslegen, dass lesen
und einen Taschenrechner bedienen kann. Man nehme das Kochrezept aus dem
Datenblatt und befolge es 1:1. Es wird gut funktionieren. Dazu muss man
von Elektronik nichts verstehen.
Aber das Lesen der Datenblätter ist für viele zu schwierig. Man muss
dazu nur hier ins Forum schaun. 80% der Fragen hätten Manual und
Datenblatt beantworten können.
Das Datenblatt enthält nur allgemeine Angaben, die Erklärungen die man
zum Programmieren braucht z.B. die Doku zur Peripherie ist im User
Manual enthalten. Sollte man eigentlich wissen.
Chris B. schrieb:> Ich glaube der TO liest hier seit 16.02.2012 nicht mehr mit ;-)
Egal, das ist jetzt eben so ein Laberthread wo sich Leute aus
Langeweile...
Decius schrieb:> Such dir einen uC aus, und suche selbst bei dem entsprechenden> Hersteller. Oder schreibe direkt worauf du hinaus willst.PIC18F4550 (um den es ganz nebenbei gesagt hier früher mal ging)
Ich wollte darauf hinaus, dass es kein User Manual gibt.
Es gibt nur ein Data Sheet!