PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : serieller Port-Pin?



frank85
24.07.2007, 13:53
Hallo. Kann mir jemand sagen wie ich den PORT RA5 vom PIC18F8520 als seriellen Eingang benutzen kann. Wollte nämlich Daten vom Temperatursensor DS1820 einlesen, der ja auch nur eine Datenleitung besitzt und folglich die Daten seriell sendet. Und das was im Datenblatt steht versteh ich nicht so richtig. Danke.

MFG Frank85

Mobius
25.07.2007, 09:16
Also, RA5 ist mit 2 internen Modulen gemultiplext. Einerseits mit einem analogen Eingang (welchen du natürlich vor dem Benutzen von diesem wegschalten musst, wie das geht, steht im Datenblatt auf der Seite 214, im Kapitel "19.0 10-BIT ANALOG-TO-DIGITAL CONVERTER (A/D) MODULE"). Danach ist noch das Low Voltage Detection Modul da angeschlossen (Seite 235 beschriebt, welches Bit du setzten/löschen musst um den Abzuschalten).

Das ganze, also welcher Pin welche Aufgaben erfüllen kann, kannst du einerseits, per überischt auf der Seite 2 sehen, oder genauer beschrieben als Zusammenfassung unter dem Kapitel "10. IO-Ports". Für dich ist dann Tabel 10-1 "PortA Functions" ausschlaggebend.

lg
Mobius

frank85
01.08.2007, 23:06
Hallo.

Danke für die Antwort.

Ich wusste aber schon das ich diese beiden Module ausschalten muss.
Was ich wissen wollte ist: Wie kann ich mit meinem PIC ein 8 bit langes Wort einlesen, seriell versteht sich? Der Temperatursensor schickt mir die bits doch hintereinander. Da muss es doch irgendein Register im PIC geben, welches die ankommenden bits speichert. Oder hab ich da was falsch verstanden? Oder muss das sogar sofwareseitig geschehen? Wenn ja, kann mir dann mal bitte einer einen Denkanstoß geben, wie das funktionieren soll?

Mfg

Frank85

BigWumpus
22.08.2007, 23:52
Lies Dich erst mal etwas ein in die 1-Wire-Protokolle. Der DSxxxx wird nicht nur einfach 8 Bit über die Leitung senden!!!!

In PicBasic gibt es da einen Befehl, der die Kommunikation erledigt.

frank85
23.08.2007, 13:22
Hallo, das habe ich mir schon ein paar mal durchgelesen und werde es wahrscheinlich noch ein paar mal mehr O:). Steht jedenfalls drin das man Verbindung unterbrechen kann wenn man z.B. die nötigen Bits schon empfangen hat. Ist also egal wieviel Bits. Ich weiß von nem Kumpel das es in Basic einfacher geht als in Assembler. Möchte es halt nur mit Assembler probieren.

Kann es so funktionieren? :

erstes Bit am Pin in Adresse x verschieben
zweites Bit am Pin in Adresse y verschieben
.
.
.
usw.
und dann alle Bits zusammen auswerten und am Display ausgeben.

Mfg

Frank85

Maxigraf
23.08.2007, 13:36
wie wärs mit 1. bit am pin zu adresse x addieren,
falls noch weitere bits, dann adresse x um eins nach links verschieben und 2. bit addieren, usw... ;)

nach 8 durchläufen nimmt man halt die 2. adresse

dann brauchst ned soviel speicher? ^^

Mobius
23.08.2007, 13:55
Jau, aber dank dem PIC, dass durch den Carry rotiert wird, geht es einfacher. Du schiftest nach links (rlf f,d) (wenn die Übertragung MSB -> LSB ist, ansonsten nach rechts) und dabei wird der Carry-Bit an die erste Stelle (oder letzte Stelle, je nachdem in welche richtung du rotierst) des Bytes geschoben.


#define _SERIAL_IN PORTA,3

bsf STATUS,C
btfss _SERIAL_IN
bcf STATUS,C
rlf empfangsReg,f


das machst du 8 mal (mittels einer Schleife drumherum) und danach hast du das erste Byte in deinem Register. Danach musst du es nur noch auswerten :).

lg
Mobius

frank85
05.09.2007, 22:41
Hallo.

Ich habe dein Tip eingebaut. funktioniert leider trotzdem nicht.
folgendes problem:

Im Datenblatt steht das ich den DS1820 auf low ziehen muss, bevor er anfängt eine Null oder eine Eins zu schicken. Muss ich für jedes einzelne Bit den DS1820 kurzzeitig auf low ziehen?
Es ist nicht so als hätte ich nicht alles ausprobiert. Ich muss nur ganz sicher sein das es so ist.

Gruß