mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik A/D einlesen und über serielle Schnittstelle ausgeben


Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich hab schon mehrfach hier im Forum gesucht und auch einiges 
ausprobiert, aber nach 6 Stunden ausprobieren such ich jetzt eure Hilfe.

Will ein Signal über den A/D einlesen und über die serielle 
Schnittstelle ausgeben. Habe folgende Code schon fertig und bin zu der 
Erkenntnis gekommen wenn ich in der Simulation den Wert ALTSELOP3 = 1 
setze kommt was auf der seriellen Schnittstelle raus sonst nicht.
Setze ich den Wert im Code auf 1 muss ich noch eine zustäzliche Klasse 
einbinden, die sich aber mit der reg167.h nicht verträgt und mir 
Fehlermeldungen ausgibt.

Vielleicht hat jemand ja eine Idee bzw. ne andere Lösung für mich.

Danke im vorraus!
/*********************************************/
/*                       */  
/*  Beipsielprogramm zur Anzeige an Port 2   */
/*                       */

#include <reg167.h>          // einbinden der 80C167 Header Datei
#include <stdio.h>          // Standard I/O Funktionen einbinden


void wait (void) {          // wait Funktion
  unsigned long i;
  for (i=0; i<150000; i++) {;}  // Verzögerungsschleife    
}
        
void ser_init (void) {        // Initialisierungsfunktion für die serielle Schnittstelle
  
  P3 |= 0x0400;          // Port 3.10 auf Output latch (TXD) setzen
  DP3 |= 0x0400;          // Port 3.10 für Output konfigurieren (TXD output)

  DP3 &= 0xF7FF;          // Port 3.11 für Input konfigurieren (RXD input)

  S0TIC = 0x80;          // Transmit Interrupt Flag setzen
  S0RIC = 0x00;          // Receive Interrupt Flag löschen
  S0BG = 0x40;          // Baudrate auf 9600 einstellen bei 20MHz
  S0CON = 0x8011;          // Serial Mode setzen  
}

void main (void) {
  int iwert=-1;
  float u_ein=-1;

  ser_init();            // Aufruf der Init-Funktion für serielle Schnittstelle
  ADCON = 0x0000;          // ADM -> Fixed Channel Continuous Conversion 

  
  while(1) {            // Endlosschleifen
    
    ADST = 1;          // Starte AD
    while(ADBSY);        // Warten solange AD aktiv
    iwert = ADDAT & 0x3ff;    // Wert auslesen und abspeichern
    u_ein = 5. * iwert / 1023.;  // Wert umrechnen auf Volt
    printf ("Spannung %f \n", u_ein);
    wait();

   }
}

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zusatz:

benutze das Keil MCB-XC167 Board mit Keil uVision 3

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.