Seite 1 von 1

Protokolle

Verfasst: 10.05.2008 10:54
von Tommes
Protokolle

Re: Protokolle

Verfasst: 25.07.2008 15:01
von kbumml
Quelltexte

Re: Protokolle

Verfasst: 01.06.2010 21:30
von motte
Ansteuerung eines Gleichstrommotors

Re: Protokolle

Verfasst: 22.07.2011 16:04
von mentesis
Einlesen einer Spannung durch Interrupt (INT) an Port 5 und Anzeige des Spannungswerts auf dem LCD

Code: Alles auswählen

#include <reg167.h>
#include <stdio.h>
#include <string.h>


sbit led=P2^0;
sbit RS=P7^0;
sbit RW=P7^1;
sbit DE=P7^2;

typedef union{
	char lines[4][17];
}disp_t;


const char dispAdr[] = {0,0x40,0x10,0x50};


disp_t lcdanz;


void wait(unsigned int t)
{
	/* Aufloesung T3: 1.6 us */
	T3 = 0;
	T3R = 1;
	while (T3 < t);
	T3R = 0;
}

unsigned int dispBusy(){
	unsigned int data=0;	

	DP8=0;
	RS=0;
	RW=1;
	DE=1;
	wait(10);
	DE=0;
	
	data=P8;
	
	DP8=0xFF;	

	return data&0x80; // BF=1 ... busy, BF=0 ... idlÈ*/
}

void dispWriteCmd(unsigned int cmd,data){
	P7=cmd&0x03; // nur RS und RW
	P8=data;
	DE=1;
	wait(4);
	DE=0;
}

void dispInit(){
	// Laut Datenblatt...	

	wait(9375);
	dispWriteCmd(0,0x30);
	wait(2815);
	dispWriteCmd(0,0x30);
	wait(65);
	dispWriteCmd(0,0x30);
	while(dispBusy());
	dispWriteCmd(0,0x38);
	
	while(dispBusy());
	dispWriteCmd(0,0x3F);
	
	while(dispBusy());
	dispWriteCmd(0,0x0A); 	// Display aus
	while(dispBusy());
	dispWriteCmd(0,0x01);	// Display lˆschen
	while(dispBusy());
	dispWriteCmd(0,0x0E);	// Display an
	while(dispBusy());
	dispWriteCmd(0,0x06);

	while(dispBusy());
	dispWriteCmd(0,0x0D);
}

void dispRefresh(){
	char i=0;
	char j=0;
	
	T0IE=0;	  // In Ruhe Display beschreiben --> Sys-Tick ausschalten
	
	for(j=0;j<4;j++){
		// Adresse weiterschieben (letzen 4 Zeichen ¸berspringen)
		while(dispBusy());
		dispWriteCmd(0,dispAdr[j]+0x80);
		
		// Daten schreiben
		for(i=0;i<16;i++){
			while(dispBusy());
			dispWriteCmd(0x01,lcdanz.lines[j][i]);
		}
	}
	
	T0IE=1;
}

void t0_int() interrupt 0x20{ // Interruptserviceroutine
	
	// Status-LED
	if (led==0) led=1; // 0x20 Interruptquelle
		else led=0;
	
	sprintf(lcdanz.lines[2],"* U = %1.3f V  *",(float)(ADDAT&0x03FF)*5/1024,3); // Umrechnung und Puffer-Beschreiben
	dispRefresh();
}

void main(){
    
	DP2=1;
	DP8=0xFF;
	DP7=0x07;


	P5DIDIS=1; //disconnect digital input stage

	T01CON=0x0005; //T0R=0 Stopp, T0M=0 Timermode
					//T0I=5 Vorteiler 256 --> 12,8 μs
	T0REL=0x1B1E; //65536-6942=58594 --> 0,75s
	T0=T0REL; //T0 zählt ab T0REL aufwärts
	T0IC=0x44; //T0IE=1 Interrupt erlaubt

	T3CON = 0x0002; // Timer f¸r wait

	//ILVL=1, GLVL=0
	
	//ADC config
	ADCIC=0x00;		//kein Interrupt nach Conversion
	ADEIC=0x00;		//ADC Error
	

		
	ADCON=0xF210; //ADCH=0, maximale Verzögerung, Read-Control, Und los!
	ADST=1;	
			
	dispInit();	

	strcpy(lcdanz.lines[0],"** EC_JAN_209 **");
	strcpy(lcdanz.lines[1],"*              *");
	strcpy(lcdanz.lines[2],"*              *");
	strcpy(lcdanz.lines[3],"****************");

	dispRefresh();
	
	IEN=1; //globaler Interrupt freigegeben
	T0R=1; //Timer0 Start
  
  while(1){
   
  }
}
Wir hatten ziemlich Probleme mit den Cursor-Adressen des LCD. Uns hat das PDF im Anhang - im Gegensatz zu denen in der braunen Mappe - sehr geholfen. Ansonsten einfach mal euer Display abschrauben und das Datenblatt zu dem Controller raussuchen.

Re: Protokolle

Verfasst: 26.07.2011 14:29
von phoenixV02
Frequenzmessung eines Rechtecksignales.
Drauf zu achten ist das die beiden ISR die gleiche Priorität haben, das sollte noch abgeändert werden.
(z.b. 0x45 statt 44)
Es funktioniert auch so, aber is etwas hässlich, da die Messung an sich die höhere Priorität haben sollte.
( Jedoch ist ein zeitgleiches auftreten sowieso faktisch augeschlossen, und die kurze Ausgabe ISR sorgt( ffalls dennoch Gleichzeitigkeit auftritt) nur für minimalen Messfehler)

Re: Protokolle

Verfasst: 20.05.2013 01:52
von morido
Protokoll und Quelltext zum Praktikum mit dem Titel:
Einlesen der Signale des Encoders durch Interrupt (INT) an Port 8 und Anzeige der Stellung des Encoders als Dezimalzahl auf dem Bildschirm.

Re: Protokolle

Verfasst: 22.07.2013 13:20
von tilman
Auslesen eine SMT160-30 Temperatursensors.

Re: Protokolle

Verfasst: 02.08.2016 11:45
von benedikt.schmalzl
Temperaturmessung.

Re: Protokolle

Verfasst: 26.05.2017 13:12
von van_orleon
Protokoll und Quelltext zur Aufgabe:

Einlesen der Flankenwechsel des Encoders durch Verwendung des Interrupts (INT) und Ausgabe eines Spannungswertes über ein angeschlossenes digitales Potentiometer.