Forum: PC-Programmierung Messwerteausgabe hochauflösend


von Henning P. (picanfang)


Lesenswert?

Ich bin Neuling und beschäftige mich mit dem Buch PIC-Mikrocontroller 
(Bert van Dam)

Als Beispiel wird auf Seite 76 ein Voltmeter gezeigt. Dieses hat eine 
Auflösung von 8 Bit.
Die 255 Messwerte sind mir zu grob. Ich möchte die serielle Ausgabe in 
10 Bit realisieren und die Messwerte seriell an einen PC weiterleiten.

Kann mir jemand die Befehle ergänzen, die hierfür erforderlich sind?

Die "normale" Variable lautet in jal:  var byte resist,

gemessen wird mit: resist = ADC_read_low_res (3),

die Ausgabe erfolgt mit serial_sw_write(resist) an den PC in 8 Bit

Wie kann ich auf 10-Bit Ausgabe umstellen?

von Εrnst B. (ernst)


Lesenswert?

Henning Pook schrieb:
> Wie kann ich auf 10-Bit Ausgabe umstellen?

Am Einfachsten: Stell auf 16-Bit Ausgabe um.
zweimal ein Byte zu übertragen ist wesentlich einfacher zu realisieren 
als ein "krummer" Wert wie 10, sowohl auf µC als auch auf PC-Seite.

Also in der Art:

resist = ADC_read_high_res(3)
serial_sw_write(high_byte_von(resist))
serial_sw_write(low_byte_von(resist))

von picanfang (Gast)


Lesenswert?

Danke für die Unterstützung. Der Hinweis hat die grobe Richtung zwar 
gewiesen. Die Umsetzung hat aber in der vorgeschlagenen Form nicht 
funktioniert.

Nach weiteren Experimenten und diversen Compilierungsversuchen hat nun 
endlich die folgende Schreibweise zum Ziel geführt:

-- JAL 2.0.4
include 16f877_bert

-- define the pins
pin_a3_direction = input   ---Pin 5
pin_d2_direction = output  ---Pin 21
pin_c4_direction = output   --Pin 23

-- general variable
var word resist
var byte res1
var byte res2

forever loop

  -- take a sample
   ADC_read_bytes(3,res1,res2)

-- and switch
  pin_c4 = high    ---Pin 23 LED Start
  delay_100ms (1)
  pin_c4 = low     ---Pin 23
  serial_sw_write (res1)--- Ausgabe Hbyte
  delay_100ms (10)
  serial_sw_write (res2)---Ausgabe LByte
  delay_100ms(20)
  pin_d2 = high   ---Pin 21
  delay_100ms(1)
  pin_d2 = low    ---Pin 21 LED Ready

end loop

von Mike M. (mikeii)


Lesenswert?

resist = ADC_read_low_res (3),

Daraus lese ich "Lese ADC mit niedriger Auflösung"

Sieh mal in der Funktion nach, da wirst du wohl irgendwelche 
Einstellungen für den ADC in deinem PIC finden, die du verändern 
solltest, wenn der ADC denn mehr als 8 Bit kann.

von picanfang (Gast)


Lesenswert?

Die vorgenannten Zeilen

var word resist (word = 2x8Byte)
ADC_read_bytes (3,res1,res2)

löst den Messwert erfolgreich mit 10 Bit auf (bei 5V entsprechend mit 
1024 Stufungen) und kann dann mit zwei separaten Bytes an den PC 
weitergereicht werden.

Funktioniert mittlerweile bestens..
Trotzdem Danke für die Denkanstöße.

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.