Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Antworten
Benutzeravatar
Hightech
Beiträge: 11488
Registriert: So 11. Aug 2013, 18:37

Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Beitrag von Hightech »

Moin allerseits:
Ich möchte gerne mit einem Metga88 einen Touch-Sensor hinter einer Fliese realisieren.
Im Beitrag http://www.mikrocontroller.net/topic/154598#new
ist das auch beschrieben wie das wohl geht.
Aber ich weiss nicht wie man den ASM-Code in ein C-Programm bekommt.
Ich arbeite mit dem Studio-4 von Atmel, WINAVR und GCC.

Wie bau ich das in die main ein ???



Hier der ASM

Code: Alles auswählen

;--------------------------------------------------
Touch:
 sbi  PortD, Touch1B
 sbi  PortD, Touch2B
 clr  XH
 clr  XL
 ldi  Temp,  0b01001010
 ldi   TempH, 0b00000010
 ldi  Temp3, 0b00100110
 out  DDRD, TempH

_TouchLoop:
 out  DDRD, Temp
 out  DDRD, TempH
 out  DDRD, Temp3
 out  DDRD, TempH
 adiw  XH:XL, 1
 cpi  XH, $04
 breq  _TouchEnd1
 
 sbis  PinD, Touch1B
 movw  Di1:Di0, XH:XL

 sbis  PinD, Touch2B
 movw  Di3:Di2, XH:XL
 rjmp  _TouchLoop

_TouchEnd1:
 sbi  DDRD, Touch1A      ;apply GND on touch terminal 1A
 cbi  PortD, Touch1B      ;prepare low level on terminal 1B
 sbi  DDRD, Touch1B      ;apply GND on touch terminal 1B
 sbi  DDRD, Touch2A      ;apply GND on touch terminal 2A
 cbi  PortD, Touch2B      ;prepare low level on terminal 2B
 sbi  DDRD, Touch2B      ;apply GND on touch terminal 2B
 sts  Touch1L, Di0
 sts  Touch1H, Di1
 sts  Touch2L, Di2
 sts  Touch2H, Di3
 sbi  Status, _NewTouch
 ret
und dies:

Code: Alles auswählen

.def  Di0      =r12
.def  Di1      =r13
.def  Di2      =r14
.def  Di3      =r15

.equ  Status      =GPIOR0  ;Flag register
.equ  _NewTouch    =0

.equ  Touch1A      =2    ;PortD
.equ  Touch1B      =3
.equ  Touch2A      =5    
.equ  Touch2B      =6

.equ  Touch1L      =$0100
.equ  Touch1H      =$0101
.equ  Touch2L      =$0102
.equ  Touch2H      =$0103
Bild
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Beitrag von flogerass »

Das muss einfach in

Code: Alles auswählen

asm("xxxx\n\t"
"xxxx\n\t"
"xxxx\n\t");
kann aber je nach Compiler etwas variieren.

Es würde übrigens ein gemeinsamer Treiber-Pin reichen. Und den Kondensator in Reihe braucht man normalerweise auch nicht. Meiner Meinung nach stören die sogar eher.
Jannyboy
Beiträge: 1418
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Beitrag von Jannyboy »

Ich habe zwar mehr mit PICs zu tun aber da auch mit Capacitive Touch.
Also die Auslese Routine sollte man in eine Interrupt-Routine reincoden.
Die wird denn Alle 10-100ms aus geführt. (jenach angewandten Filter-Algorithmus)
Die eigentliche Auswertung kommt in die Main-Routine oder in eine Subroutine wie bei bedarf ausgeführt wird.

Edit: die Schaltung ist schon richtig. Die basiert auf 2 Kondensatoren die von den einen in den anderen umgeladen wird.
Wenn man das Touch Pad berührt wird mehr Energie umgeladen.

Beim Pic gibt das ein Capacitive Touch-Modul. Das kommt ohne externe Bauteile aus und basiert auf einen Oszillator.
Zuletzt geändert von Jannyboy am So 29. Sep 2013, 10:41, insgesamt 1-mal geändert.
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Beitrag von flogerass »

Von ST gibts da auch ne tolle Apnote mit Programmcode. Ist für meinen Geschmack aber etwas zu aufgebläht. Da kann man aber gut die Assembler-Teile extrahieren und sich anschauen wie das zusammengehört.
Benutzeravatar
Fritzler
Beiträge: 12603
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Beitrag von Fritzler »

Von Atmela gibts da auch ne Appnote für AVRs und der Zabex hat das doch auch schon gemacht. 8-)

http://www.atmel.com/products/touchsolu ... hsoftware/
http://www.zabex.de/site/schaltungstechnik.html#kanmi2
Benutzeravatar
Hightech
Beiträge: 11488
Registriert: So 11. Aug 2013, 18:37

Re: Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Beitrag von Hightech »

EIn wenig konkretere Hilfe brauche ich trotzdem nochmal wegen des Einbinden des ASM-Code.
Wie bekomme ich denn aus dem ASM-Code die Werte in die Main, oder muss ich den ASM nur aufrufen, laufen lassen und dann
ein Register auslesen oder wie ?
Benutzeravatar
Fritzler
Beiträge: 12603
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Beitrag von Fritzler »

Also entweder du machst inline Assembler (=teufels Küche):
http://www.nongnu.org/avr-libc/user-man ... e_asm.html
http://www.rn-wissen.de/index.php/Inlin ... in_avr-gcc
http://www.mikrocontroller.net/articles ... -Assembler

Oder du kapselst das in eine eigene Assemblerdatei die du in der main aufrufst.
Damit die "Touch:" Funktion extern aufrufbar ist muss darüber noch stehen ".extern Touch"
Ein Funktionsaufruf im GCC hält sich an die Regiusterconvention.
Also das Ergebnis landet in R0 und die Übergabeparamater sind in R0 bis R4.
Müsstest den ASM Code also noch so umändern (wenns nich shcon so ist), dass er diese Registerkonvention einhält.
Benutzeravatar
Hightech
Beiträge: 11488
Registriert: So 11. Aug 2013, 18:37

Re: Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Beitrag von Hightech »

Ah, das ist schonmal eine Hilfe, danke !
Kann ich nicht "einfach" hergehen und das in C übersetzen,ist ja eigentlich nur Registergeschiebe und ne Schleife.
Benutzeravatar
Fritzler
Beiträge: 12603
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Beitrag von Fritzler »

Dann guck dir meinen LInk zu Zabex seiner Webseite an.
Da gibs C Code ;)
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Beitrag von flogerass »

Bei den Touch-Geschichten ist das Timing wichtig. Deshalb macht man das meis in Assembler. Es kann mit C funktionieren, muss aber nicht.
Benutzeravatar
Hightech
Beiträge: 11488
Registriert: So 11. Aug 2013, 18:37

Re: Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Beitrag von Hightech »

Fritzler hat geschrieben:Dann guck dir meinen LInk zu Zabex seiner Webseite an.
Da gibs C Code ;)
Der Zabexsche reicht aber nicht durch die Fliesen durch, der andere behauptet es geht durch Rigips+Fliese !
Benutzeravatar
flogerass
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Beitrag von flogerass »

Musst halt die aktive Fläche vergrößern.
Benutzeravatar
Hightech
Beiträge: 11488
Registriert: So 11. Aug 2013, 18:37

Re: Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Beitrag von Hightech »

flogerass hat geschrieben:Musst halt die aktive Fläche vergrößern.
Schatz, du must GANZ an die Wand gehen :)
Benutzeravatar
Sterne
Beiträge: 1045
Registriert: Fr 28. Jun 2013, 10:30
Wohnort: Frickelkommando Nordwest

Re: Touch- Schalter hinter die Fliese bauen. Qtouch+ATMEGA88

Beitrag von Sterne »

Um die Ent-/Ladezeiten mit hoher zeitlicher Auflösung zu messen, sollte doch eine interruptgesteuerter Timer das Mittel der Wahl sein. Da hat man unabhängig von der Programmiersprache die größte zeitliche Auflösung. Beschrieben wird das z.B. unter AVR130.


Gruß
Sterne
Antworten