Touch-Sensor mit PIC
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  Elektronik  |  Elektronik und Schaltungen  |  Touch-Sensor mit PIC « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Touch-Sensor mit PIC  (Gelesen 599 mal)
 
Luftlandeapotheker
Newbie
*
Offline Offline

Beiträge: 8


Profil anzeigen
« am: Februar 28, 2012, 00:28:12 »

Hallo zusammen!

Im Netz habe ich eine interessante Schaltung eines Kapazitiven Sensors gefunden (http://www.elektronik-labor.de/AVR/Touch.html) und (www.zabex.de/site/schaltungstechnik.html#kanmi2).
Diese möchte ich mit einem PIC12F675 nachbauen.
Ursprünglich ist das Projekt für ATtiny13 bzw. Atmel-Prozesoren gedacht.
Hier mein Versuch, das Ganze auf einem PIC 16F877 nachzubauen:
Zwischen PB0 und PB1 befindet sich ein 22nF Keramik-Kondensator, an PB1 hängt noch ein Metallstück als Sensor dran.
Code:
int n;
void main()
{setup_adc_ports(NO_ANALOGS);
 setup_adc(ADC_OFF);
 setup_psp(PSP_DISABLED);
 setup_spi(FALSE);
 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
 setup_timer_1(T1_DISABLED);
 setup_timer_2(T2_DISABLED,0,1);
 Printf ("\nTest o.K.");
 delay_ms(500);
 set_tris_B(0x00);  //alle Ausgang
 output_B (0x00);
 delay_us(250);
   while(1)
   {
   set_tris_B (0x02);  //Pin_B1 Eingang
   output_B (0x00);  // PORT B low
   n=0;
      While(1)
      {
      set_tris_B (0x02);  //Pin_B0 Ausgang, B1 Eingang
      output_B (0x01);  //Pin_B0 high (+)
      delay_us(10);
      n++;
      set_tris_B (0x03);  //Pin_B0, B1 Eingang
      delay_us(10);
      set_tris_B (0x01);  //Pin_B0 Eingang, B1 Ausgang
      output_B (0x01);  //Pin_B0 high, B1 low
      delay_ms(250);
      if (input(PIN_B0)==1) break;
      set_tris_B (0x03);  //Pin B0, B1 Eingang
      }
   set_tris_B (0x00);     //PIN_B0,1,2,3,4 Ausgang
   output_B (0x00);     //PORTB = low
   Printf ("\nLadezyklen =%i",n);
   }
}

Leider funktioniert es noch nicht. Als Ladezyklus wird immer 1 ausgegeben.
Meine Frage:
Hab ich das BASCOM-Programm aus dem 1. Link korrekt umgesetzt? Oder gibt es einen essentiellen Unterschied zwischen Atmel und PIC, den ich übersehen habe?

Über Anregungen würde ich mich sehr freuen!

Danke schonmal..

Matthias
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #1 am: Februar 28, 2012, 10:07:25 »

Hi,

check mal alle Ansel, Tris, Port Register etc. WEnn du ein Oszi hast, mal messen.

Code:
      output_B (0x01);  //Pin_B0 high, B1 low
      delay_ms(250);
      if (input(PIN_B0)==1) break;
Ohne dass ich mir alles im Detail angeschaut hat. Egal was du an B0 anschliesst: Wenn du den Pin erst high setzt, dann 250ms wartest, und dann den Pegel abfragst, dann würde es mich auch wundern wenn da was anderes als eine 1 zurückgegeben wird (ausser es hängt eine riesige Kapazität dran). Sicher, dass das so stimmt?

Gruß
Stefan
Gespeichert

Luftlandeapotheker
Newbie
*
Offline Offline

Beiträge: 8


Profil anzeigen
« Antworten #2 am: Februar 28, 2012, 20:21:40 »

Hallo Stefan!

Ja, da hast du selbstverständlich Recht, da sollte immer 1 rauskommen. Ich habe mir nochmal die Grundlagen angeschaut, und daraufhin die Schleife wie folgt geändert:
Code:
while(1)
   {
   set_tris_B (0x02);  //Pin_B1 Eingang
   output_B (0x00);  // PORT B low
   n=0;
      While (1)
      {
      set_tris_B (0x01);  //Pin_B0 Eingang, B1 Ausgang
      output_B (0x02);  //Pin_B1 high (+)
      delay_us(100);
      n++;
      Output_B (0x00);
      set_tris_B (0x02);  //Pin_B0, Ausgang, Pin_B1 Eingang
      delay_us(10);
      set_tris_B (0x03);  //Pin B0, B1 Eingang
      if (input(PIN_B0)==1)
      {break;}
      }
   set_tris_B (0x00);     //PIN_B0,1,2,3,4 Ausgang
   output_B (0x00);     //PORTB = low
   Printf ("\nLadezyklen =%Lu",n);
   delay_us(250);

Nach dem Test wird jetzt auch etwas angezeigt, allerdings sieht das mehr nach Zufall aus, und auch nur, wenn ich den Sensor berühre. Lächelnd
Werde nochmal die Grundlagen lesen müssen...
Ein Oszi habe ich natürlich gerade nicht bei der Hand.

Vielen Dank schonmal!
Gruß
Matthias
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.051 Sekunden mit 19 Zugriffen.
 
Top! Top!