PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Temparatur Messen und grafisch darstellen - Attiny13



ichwillbis
07.02.2011, 00:55
Hallo,

ich habe eine Frage bezüglich dem Temparatur messen mit dem Attiny13.
Ich habe mir bereits den Quellcode aus dem anderen Thread kopiert, aber ich verstehe ihn nicht ganz.
Ich selbst besuche die 13. Klasse des Fachgymnasiums Technik und muss genau dieses Projekt durchführen. Allerdings bin ich auf diesem Gebiet absoluter Laie.

Mir ist klar, dass die Temparatur nicht direkt mit dem attiny13 gemessen wird. Wir haben dafür ein speziellen Aufsatz mit einem temparaturabhängigen Widerstand. Der Schaltplan liegt mir vor.
Aber was bewirkt der Quellcode? Was wird angesteuert bzw. ausgegeben? Und welchem Projekt entspricht es im AVR Studio? Einer .asm oder .c?
Wenn ich den Code richtig deute, würde ich sagen, dass der Messwert ins Register r16 (..oder r17?) übergeben wird. Wird die Diode passend dazu gedimmt, also zur Temparatur? Falls nicht, wie lässt es sich einstellen?

Das Projekt sieht so aus, dass wir die Temparatur dann grafisch in Excel darstellen sollen.
Es muss ja ein Wert in r16 oder r17 vorliegen, oder? In welchem Intervall wird er aktualisiert? "Wie" liegt er vor? Binär? 8-Bit?
Und wie bekomme ich ihn in Excel?

Über Hinweise, Tipps und Tricks freue ich mich wirklich.

Ich verbleibe untergebenst mit tausend Dank
- ichwillbis -

dino03
07.02.2011, 18:57
Hallo,

willkommen im forum :flowers:


ich habe eine Frage bezüglich dem Temparatur messen mit dem Attiny13.
Ich habe mir bereits den Quellcode aus dem anderen Thread kopiert, aber ich verstehe ihn nicht ganz.
ähhhh ... welcher andere Thread ? Bei den vielen Threads hier im Forum wär
es nicht schlecht wenn du einen Link darauf setzen könntest. Ich hab hier
teilweise schon Probleme wenn ich nen Thread von mir wiederfinden will :rolleyes:


Ich selbst besuche die 13. Klasse des Fachgymnasiums Technik und muss genau dieses Projekt durchführen. Allerdings bin ich auf diesem Gebiet absoluter Laie.
Wenigstens schon einmal programmiert ? Wenn ja was ?
Schon einmal irgendwas mit Elektronik gebastelt ?


Mir ist klar, dass die Temparatur nicht direkt mit dem attiny13 gemessen wird. Wir haben dafür ein speziellen Aufsatz mit einem temparaturabhängigen Widerstand. Der Schaltplan liegt mir vor.
Tja ... der Schaltplan liegt mir leider nicht vor. Darum kann ich auch nichts
sagen was die Meßmethode angeht.


Aber was bewirkt der Quellcode? Was wird angesteuert bzw. ausgegeben? Und welchem Projekt entspricht es im AVR Studio? Einer .asm oder .c?
Wenn ich den Code richtig deute, würde ich sagen, dass der Messwert ins Register r16 (..oder r17?) übergeben wird. Wird die Diode passend dazu gedimmt, also zur Temparatur? Falls nicht, wie lässt es sich einstellen?
Also WinAVR => C (.c)
AVR-Studio => Assembler (.asm)
r16, r17 sind Arbeitsregister. Da wird keine Temperatur übergeben. Das kommt
jetzt drauf an was du wie meinst und überhaupt ....


Das Projekt sieht so aus, dass wir die Temparatur dann grafisch in Excel darstellen sollen.
Es muss ja ein Wert in r16 oder r17 vorliegen, oder? In welchem Intervall wird er aktualisiert? "Wie" liegt er vor? Binär? 8-Bit?
Und wie bekomme ich ihn in Excel?
:confused: :confused: :confused: :confused:
Also mit dem Tiny13 den Sensor (was für einer auch immer) abfragen (wie
auch immer) und den Wert irgendwie in eine Zahl wandeln die aussieht wie
eine Temperatur und die dann über ne Serielle Schnittstelle zum PC schicken.
Für die Serielle fehlt aber noch nen MAX232 für die Pegelwandlung. Und
außerdem hat der Tiny13 weder nen UART noch ne USI oder irgendetwas
was dir in Hardware so etwas wie eine serielle Schnittstelle bereit stellt.
Außerdem hat er nur 1kByte Flash. Also kannst du mit dem was du machen
willst schonmal bei Bascom nen Haken drann machen und bei Assembler
weitermachen. Tja ... und das mal eben inn Assembler stricken wo du, wie
du sagst "absoluter Laie" bist ...
Ich sag da nur "Herzlichen Glühstrumpf" :eek:


Über Hinweise, Tipps und Tricks freue ich mich wirklich.

Ich verbleibe untergebenst mit tausend Dank
- ichwillbis -
Also als Tip : Nimm nen Tiny85 wenn es bei 8 Pins bleiben soll. Dann geht
wenigstens Bascom und du kannst nen Soft-UART verwenden.

... oder wenn es Assembler sein soll (AVR-Studio) dann nimm den Tiny2313.
Der hat ne Hardware-UART drin die dir sehr viel Arbeit abnimmt. Für den
Analog-Komparator als AD-Wandler gibts sehr viele Beispiele. Das wäre auch
ne Möglichkeit.

... oder gleich Nägel mit Köpfen und nen Mega8 (der kleinste der Megas).

Gruß
Dino

ichwillbis
08.02.2011, 23:29
Hallo!

Schon mal vielen Dank für die Antwort!

Das ist der Thread von dem ich sprach:
http://www.avr-praxis.de/forum/showthread.php?p=1342

Ich habe momentan gar kein Plan :) Habe zwar schon mal eine Platine gelötet, aber da ist auch Schluss. Programmiergrundkenntnisse sind vorhanden, sprich Visual Basic, PHP...
Das Ganze ist ein Schulprojekt, d.h. der Attiny13 und der Aufsatz mit dem temperaturabhängigen Widerstand ist Vorgabe.

Okay, dann nehme ich Assembler. Die theoretische Übertragung habe ich schon getestet (an einem Beispielprogramm). AVR Studio gibt eine .hex aus, die ich mit dem Loader über die serielle Schnittstelle überspielen kann. Läuft.

Mein jetziger Projektstand:

.include "tn13def.inc"


Meine Zielformulierung bzw. -frage:
Wie fordere ich die Temperaturmessung in regelmäßigen Intervallen an bzw. ab? Es muss ja wahrscheinlich immer wieder eine Anfrage geschickt werden, oder?
Und wie geht es dann weiter? Der Quellcode müsste ja quasi eine Überprüfung der Spannung auslösen, so dass dann der Widerstand berechnet werden kann. Dieser wird dann abgespeichert bzw. übertragen - oder? :)


Tausend Dank im Vorraus.

Beste Grüße
- ichwillbis -

Cassio
08.02.2011, 23:59
Hallo !

Da ich weder ASM noch C beherrsche, kann ich dir programmiertechnisch leider nicht helfen. :o
Dafür haben wir aber Dino, Dirk, Oldmax, Oaskar usw.! Einer von denen wird dir schon einen Hinweis geben können. ;)


Wo hast du denn den Schaltplan her? :hmmmm:
Hast du den aus der Schule bekommen?

Die serielle Verbindung vom Tiny13 zum PC wird ohne einen "Levelkonverter", zum Beispiel einen MAX232, nicht funktionieren.
Außerdem benötigst du für eine einfache serielle Verbindung, in der nur Daten vom AVR zum PC gesendet werden soll, die Pins GND und TxD.
Dann fehlt noch der 10K Reset-Widerstand und ein Elko von etwa 100µF hinter dem Spannungsregler.... oder soll das mit dem "handgemalten" 22 der Elko dafür sein?

Was für einen temperaturabhängigen Widerstand haben die dir denn gegeben?
PT100, PT1000 irgend ein NTC oder PTC, oder einen KTY?

Worum geht es denn bei dem Schulprojekt genau?
Sollt ihr nur mal etwas interessantes Programmiert haben....... egal ob die Temperaturwerte nun genau sind oder nicht?
Dann würde das Ganze ja auch einen Sinn ergeben. ;)

Wie aber oben schon geschrieben.....
bei ASM muss ich leider passen. :cool:


EDIT: Hätte ich ja fast vergessen...
Wenn du dich über ASM schon mal informieren möchtest, dann schau unbedingt mal HIER ! (http://www.avr-praxis.de/forum/showthread.php?t=1365) hinein!


Wünsche trotzdem viel Spaß dabei,
Cassio

LotadaC
09.02.2011, 16:36
Hmm... ist ein wenig unübersichtlich, inzwischen... ich fasse nochmal zusammen. Du sollst:
-mit einem Attiny13
-mit einem (bisher nicht näher erklärten) temperaturabhängigem Widerstand (Aufsatz -> der ist bereits irgendwie verdrahtet -> Schaltplan?)
-die Temperaturen messen (durch irgendwas getriggert (PC, timer im µC...), oder einmalig?)
-und irgendwie an den PC übertragen (Welche Schnittstelle am PC? - Auswertung da steht dann auf einem anderen Blatt.)

folgende Annmerkungen von mir:
-die SPI-Schnittstelle, mit der Du programmierst, steht Dir zur Laufzeit des Programm's nicht zur Verfügung. TWI und U(S)ART gibt es auch nicht, folglich mußt Du Dir selbst irgendwas in Software stricken...
-desweiteren brauchst Du dann eine geeignete Anpassung Deiner Übertragungslösung an die gewünschte PC-Schnittstelle (da gibts dann zT fertige ein-Chip-Lösungen)
-ADC zur Messung sollte erstmal klar sein
-Muß der µC die Temp. berechnen (wäre ja streng genommen die Lösung eines Polynomes 4ten Grades beim Pt-xxx), oder reicht es, die Rohdaten zu senden? Un ansonsten, welche Genauigkeit ist gefordert?

dino03
09.02.2011, 20:06
Hi,

ich hab mir den Schaltplan nun mal angesehen und bekomme das :bad:
Welche Schule / welcher Leher quält seine Schüler eigentlich mit so einer
hirnrissigen Schaltung ? Die Schüler sollen was mit Mikrocontrollern machen
aber kosten darf es auch nix. Sorry :banghead: Warum kein Tiny24/44/84 ?
Da hätte man wenigstens die Pins mal ein wenig entkoppeln können damit es
den Schülern verständlicher wird und einfacher zu programmieren ist. Naja...

OK ... dann zurück zum Thema ...

Der andere Thread geht mit Assembler zu Werke. Also AVR-Studio.

So wie es aussieht sind die Bezeichnungen der Seriellen Schnittstelle die, die
am PC sitzen. Also RxD vom PC, TxD vom PC, ...

Die Pins 7 (PB2/SCK), 6 (PB1/MISO), 5 (PB0/MOSI) und 1 (Reset) stehen
schon mal nur für die Programmierung und für RS232 zur Verfügung. Also
muß der Temperatursensor an Pin 2 (PB3/ADC3) oder 3 (PB3/ADC2) dran.

Der Tiny13 kann nur mit internem Takt laufen (mit der entsprechenden
Ungenauigkeit beim RS232 Timing). Das Senden der Daten muß man mit
PB1 nachempfinden. Nur wie strickt man sich dann noch halbwegs Pegel
zusammen die irgendwie noch von der Seriellen Schnittstelle des PCs
halbwegs als gültig erkannt werden ? Man ist das ein Gestricke ...
Ich krieg echt das Kotzen ... (Sorry)

Noch ne Sache... Wie sollt ihr das Programm auf den Tiny13 bekommen ?
Hapt ihr nen ISP-Programmer ? Oder soll das Programm über einen
Bootloader auf den Tiny geladen werden ? Ich hab im Datenblatt was
gelesen von "In-System-Programming by On-Chip-Bootprogram".
( Hat das überhaupt schonmal einer hier gemacht ? ... )

Was für eine Entwicklungsumgebung (außer AVR-Studio und WinAVR)
habt ihr überhaupt zur Verfügung ? Ist die Platine von irgendeinem
Hersteller eingekauft der sich mal wieder was dolle einfallen lassen hat ?

Noch was wichtiges ... was ist eigentlich für ein Zeitrahmen geplant ?
Wann soll es fertig sein ?

Gruß
Dino

LotadaC
09.02.2011, 23:06
Ich hab das zwar bisher noch nie gemacht, aber mMn war das mit dem Bootloader doch so:
Wenn die entsprechenden Fuses gesetzt sind, wird beim Reset(!) statt des Resetvektors der Bereich im Flash angesprungen, wo der Loader stehen sollte. Der versucht dann, über eine geeignete Schnittstelle, den neuen Code zu beziehen, und prügelt ihn in den Flash. was mir hier fehlt, ist die verwendung des Reset-Pins.
(Ok, wenn man die Platine ohne(!) eigene Stromversorgung an die serielle Schnittstelle des PC klemmt, und da 'ne entsprechende Software(*) läuft, liefern die Handshake-Leitungen den Saft, und können 'n Power on Reset generieren.)
Die Pegelanpassung PC(RS232)->µC(TTL) sollen wohl die internen Port-Schutzdiden des µC zusammen mit dem relativ hohen R übernehmen, aber in der anderen Richtung... (beim RS232 gelten höchstens -3V als low-Pegel (="0"), alles zwischen -3V und +3V gilt als undefiniert.)

(*) wenn es diese Software gibt, gibt es vielleicht auch eine "Terminal-Software", die auf ähnlichem Wege bytes sendet/empfängt. Das setzt dann natürlich auch dementsprechende Sende-/Empfangsroutinen in der Firmware voraus - ggf irgendwelche includes vorhanden?

ichwillbis
10.02.2011, 12:43
Hallo,

vielen Dank für die Antworten!

@LotadaC: Ja, genau - so sieht's aus. Die Temperaturmessung soll in regelmäßigen Abständen erfolgen.
Die Übertragung muss via RS232 erfolgen, Bootloader vorhanden (GND und RES müssen verbunden sein, oder?)

@dino03: Oh ja. Wahrscheinlich waren die anderen Controller zu teuer - keine Ahnung ;)
Das Senden der Daten muß man mit PB1 nachempfinden - Wie meinst du das?
Ansonsten steht uns keine weitere Programmierumgebung zur Verfügung.
Zeitraum: Also für das gesamte Projekt (inklusive grafischer Auswertung usw.) haben wir knapp 2 Wochen Zeit.
Die Genauigkeit der Temparatur: Gemessen werden soll die Raumtemparatur mit zwei Nachkommastellen, wobei wir das ja mit Excel o.ä. machen können.


Was bewirkt denn dieser Quellcode? (Ich habe ihn aus dem anderen Thread kopiert):

;TEST-Programm

.include "tn13def.inc"

.org 0
rjmp Main

Main:

;***EINLESEN***


;PB3 ist der Ausgang, LED aus

sbi PORTB, PB3
sbi DDRB, PB3

;VCC ist analog, Referenz zu PB4

ldi r16, (1<<MUX1)|(1<<ADLAR)
out ADMUX, r16

;ADC Enable, prescaler 8
ldi r16, (1<<ADEN9)|(1<<ADPS1)|(1<<ADPS0)
out ADCSRA, r16

;***HAUPTPROGRAMM***


Main_loop

rcall Convert

rjmp Main_loop


;***Konvertieren***

sbi ADCSRA, ADSC ;Start
convert_adc_wait: sbic ADCSRA, ADSC ;Bereit?
rjmp convert_adc_wait

in r16, ADCH ;WICHTIG: Ergebnis in den Register 16

cpi r16, 128
brlo convert_led_an
sbi PORTB, PB3 ;LED aus - TEST
ret

convert_led_an:
cbi PORTB, PB3 ; LED ein - TEST
ret

Was bewirkt was?
- Einbindungen irgendeiner Datei
- Ein Hauptprogramm in dem ein Unterprogramm aufgerufen wird
-- Das Unterprogramm konvertiert von analog zu digital(Oder?)
- Hauptprogramm wird als Schleife ausgeführt(Oder?)

Aber was ist mit der LED? Und handelt es sich wirklich um eine Schleife?
Oder?

Theoretisch muss ja nur ein Wert verschickt werden und geguckt werden, wie viel durch den Widerstand wieder ankommt, oder?
Und wenn es wirklich eine Schleife ist, die Spannungsversorgung via Kabel erfolgt und der Wert über den PC abgerufen wird, dann ist es doch eigentlich gar nicht so schwer - oder?


Beste Grüße,
- ichwillbis -

oldmax
10.02.2011, 16:17
Hi
Was soll das sein, was du da kopiert hast? Ein Assembler-Code?
ok, fangen wir mal mit Include an... da werden für den Controller Definitionen eingebunden. z.B. "PortB", was ja eigentlich im µC nur ein Register ist und "PB3", auch nur ein Bit vom Portregister B. Solche Sachen findest du normalerweise unter einer Compileranweisung ".DEF" na ja, uznd die stehen passend für den entsprechenden Controllertyp schon vordefiniert in der Include-Datei.
Dann gehts ab mit einem Sprung ins Programm - "Main".
Programmblöcke nennt man gern so.
Am Anfang, das ist ein Bereich, der wird nur beim Start duchlaufen, also beim Einschalten oder Reset, werden Initialisierungen vorgenommen. So z. B. u. a. der Prescaler (Vorteiler) vom Timer gesetzt. Das alles zu erklären dauert hier zu lange, deshalb verweise ich einmal auf meinen Beitrag "Keine Angst vor Assembler" unter der Rubrik FAQ. Die eigentliche "Programmschleife ist


Main_loop ; Begin eines immer wieder durchlaufenden Programmteiles

rcall Convert ; Aufruf eines Unterprogrammes

rjmp Main_loop ; und Sprung zur Marke "Main_loop (Programmschleife)

Nun vermisse ich aber im restlichen Programmcode die Sprungmarke "Convert". Sie bedeutet: "hier fängt ein Unterprogramm an".
Abschließend wird die Anweisung "RET" das Programm nach dem RCall fortsetzen und zwar mit dem Sprung zu "Main_loop". Allerdings vermisse ich das Unterprogramm "Conver". Irgendwo müsste eigentlich stehen


Convert: ; hier beginnt das Unterprogramm "Convert"

RET

Irgendwie tu ich mich bei Schüleranfragen immer etwas schwer, grad wenn sie behaupten, Gymnasiast zu sein und sich auf Technik spezialisieren wollen, aber überhaupt nicht wissen, wie ein Programm funktioniert. War der Stoff so langweilig, als man euch erklärte, das ein Programm nichts anderes ist, eine immer wieder ausgeführte Tätigkeit in kleine Funktionsblöcke zu zerlegen und dazu Anweisungen zu schreibenn? Hat euer Lehrer nicht einmal erkärt, das zum Programmieren das Zerlegen eines Schrittes z.B. in kleinste Einzelbewegungen erforderlich macht. Nur, um mal zu verstehen, das für uns solch komplexe Vorgönge so selbstverständlich sind und wohl kaum jemand sich die Mühe machen wird, dies über 5 oder 6 DinA 4 Seiten ausführlich zu analysieren. Ich kann dir nur raten, laß die Finger von C&P und lerne den Stoff. Mag sein, das du anfangs noch ganz passable Noten bekommst, aber wenn du nichts verstanden hast, wirst du unweigerlich versagen.
Gruß olsmax

dino03
10.02.2011, 19:24
Hallo zusammen,


Irgendwie tu ich mich bei Schüleranfragen immer etwas schwer, grad wenn sie behaupten, Gymnasiast zu sein und sich auf Technik spezialisieren wollen, aber überhaupt nicht wissen, wie ein Programm funktioniert. War der Stoff so langweilig, als man euch erklärte, das ein Programm nichts anderes ist, eine immer wieder ausgeführte Tätigkeit in kleine Funktionsblöcke zu zerlegen und dazu Anweisungen zu schreibenn? Hat euer Lehrer nicht einmal erkärt, das zum Programmieren das Zerlegen eines Schrittes z.B. in kleinste Einzelbewegungen erforderlich macht. Nur, um mal zu verstehen, das für uns solch komplexe Vorgönge so selbstverständlich sind und wohl kaum jemand sich die Mühe machen wird, dies über 5 oder 6 DinA 4 Seiten ausführlich zu analysieren. Ich kann dir nur raten, laß die Finger von C&P und lerne den Stoff. Mag sein, das du anfangs noch ganz passable Noten bekommst, aber wenn du nichts verstanden hast, wirst du unweigerlich versagen.
Da kann ich nur zustimmen. Copy und Paste bringt zwar am Anfang sehr
schnell und einfach Ergebnisse aber dafür ist der Fall danach umso tiefer.


Zeitraum: Also für das gesamte Projekt (inklusive grafischer Auswertung usw.) haben wir knapp 2 Wochen Zeit.
Da sehe ich das größte Problem. (Mal wieder) Ich frage mich auch immer
wieder bei jedem neuen Schüler der hier händeringend nach Hilfe sucht.
Haben die Lehrer nichts gezeigt ? Haben die Schüler nicht zugehört ?
Wie soll der Stoff den man für die Lösung dieser Aufgabe benötigt in knapp 2
Wochen in einen Kopf geprügelt werden ? :eek:
- Serielle Schnittstelle (RS232) Protokoll und Pegel (http://de.wikipedia.org/wiki/RS232)
- Elektronik Grundlagen
- Assembler Grundlagen
- rudimentäre Programmstruktur (erstmal nur das wichtigste)

Ich hab 1-2 Wochen dafür benötigt mit AVR-Studio, Assembler und Tiny2313
das erste Programm zu bauen. Nur ich programmier schon seit Jahrzehnten
und bastel auch schon seit Jahrzehnten mit Elektronik. Ich weiß wie eine
Programmstruktur auszusehen hat und kann mir unter Befehlswörtern etwas
zusammenreimen auch wenn ich die Sprache noch nicht kenne.


@dino03: Oh ja. Wahrscheinlich waren die anderen Controller zu teuer - keine Ahnung ;)
Das Senden der Daten muß man mit PB1 nachempfinden - Wie meinst du das?
Ansonsten steht uns keine weitere Programmierumgebung zur Verfügung.
Die Schaltung die ihr da bekommen habt hat nicht im entferntesten was mit
RS232 zu tun. Unter ausnutzung aller Toleranzen die die RS232-Schnittstelle
am PC (COM, Seriell, ....) hergibt mußt du mit ner Menge Software, einem
Timer (wegen sauberen Zeiten für die Bitübertragung) und nem Interrupt
irgendwie die Bits vom Tiny13 zum PC quälen. Mit Betonung auf quälen.
Wenn ihr nen Tiny2313 oder nen Tiny24/44/84 oder sogar nen Mega8
gehabt hättet dann würde ich sagen ... OK das kann man als Anfänger
mit Hilfe von anderen wohl in der Zeit schaffen. Aber unter den Umständen
und dem Wissen was zur Zeit vorhanden zu sein scheint sieht das verdammt
eng aus. Da kannst du wohl die Partys, Kinobesuche und Wochenenden für
die Zeit erstmal streichen, dich auf den Hosenboden setzen, die Tips von
uns GENAUESTENS durchlesen und befolgen und dann hoffen das irgendwas
dabei herauskommt was funktionieren könnte.


Was bewirkt was?
- Einbindungen irgendeiner Datei
- Ein Hauptprogramm in dem ein Unterprogramm aufgerufen wird
-- Das Unterprogramm konvertiert von analog zu digital(Oder?)
- Hauptprogramm wird als Schleife ausgeführt(Oder?)

Aber was ist mit der LED? Und handelt es sich wirklich um eine Schleife?
Oder?
Erst einmal soviel ... In Assembler sind alle Befehle sehr stark abgekürzt.
Das ist der größte Unterschied zu anderen Sprachen ...
jmp => jump
rjmp => relative jump
sbic => skip if bit in inputregister is cleared
sbi => set bit in input register
sieht du was ich damit meine ? Verstanden ? Das mußt du erst einmal
verinnerlichen um ein Assemblerprogramm zu verstehen.
Dann als nächstes ... Ein Assemblerprogramm hat keine Variablen in der
Art wie du sie aus anderen Sprachen kennst. Es gibt Arbeitsregister im
Prozessor (r1 , r2 , ... , r29 , r30 , r31) Je nach Arbeitsregister haben die
teilweise auch noch andere Funktionen außer ein normales Byte zu speichern.
r30+r31 zB sind auch zugleich noch das 16Bit-Register Z das man als Pointer
auf Speicherbereiche benutzen kann. Sieh dir mal das Datenblatt des Tiny13
GENAU an. Aber nicht das kurze ! Das lange hat mehr Informationen die
du dringend benötigst (auch Beispiel-Listings), liegt bei knapp 2MByte und
179 Seiten. Also nicht die Summary ziehen sondern die andere größere PDF.
Das Datenblatt gibts bei Atmel bei den 8Bit-Mikrocontrollern zum runterladen.
Wenn du es nicht findest ... Google verwenden (sollte hoffentlich kein
Problem sein).


Theoretisch muss ja nur ein Wert verschickt werden und geguckt werden, wie viel durch den Widerstand wieder ankommt, oder?
Und wenn es wirklich eine Schleife ist, die Spannungsversorgung via Kabel erfolgt und der Wert über den PC abgerufen wird, dann ist es doch eigentlich gar nicht so schwer - oder?
Tja ... theoretisch ... wenn du einen PC benutzt/programmierst.
Dem Mikrocontroller mußt du sogar sagen das er überhaupt was machen soll.
Du mußt im übertragenen Sinne dein eigenes BIOS, Windows, Treiber und
Anwendungsprogramm bauen. Der ist strohdoof und verbraucht sonst nur
Strom.

Als mit Klicki und Copy und Paste kommst du da nicht weiter. Finger gespitzt
und die Tasten gequält.

Aber ließ dir erst mal das zu der RS232 durch (den Link den ich oben eingefügt
habe) das ist erstmal das wichtigste damit du überhaupt weißt wie du die
Daten zum PC bekommst. Außerdem ist der Text gegenüber dem Datenblatt
in deutsch und noch relativ kurz. Sieh dir die Pegel der Signale an ...
0V/5V (TTL) => +12V/-12V (RS232) und bei welchem Signal (0/1) welcher
Pegel anliegt. Das mußt du im Tiny13 per Software nachbauen.

Gruß
Dino

ichwillbis
11.02.2011, 09:57
Vielen Dank für eure Mühe. So, bin jetzt fertig. Und es läuft.
Der PC sendet über die Schnittstelle ein Bit, welches eine Aufforderung zur Messung darstellt. Der "Messvorgang" wird gestartet und der Wert wieder zurück an den PC gesendet.

Dort findet dann die Auswertung statt - ...okay, dass habe ich noch nicht, aber mit PHP wird das schon ;)


Mein Zusatz:
Das Bit, welches den Messvorgang einleitet, entscheidet darüber, ob die Diode leuchtet oder nicht. PHP wird dann entscheiden, ob eine 1 (Diode an) oder 0 (Diode aus) gesendet wird. Das kann man ja irgendwie mit einbauen...


Vielen Dank! :flowers:

Beste Grüße
- ichwillbis -

dino03
11.02.2011, 18:09
Hi,


Vielen Dank für eure Mühe. So, bin jetzt fertig. Und es läuft.
Der PC sendet über die Schnittstelle ein Bit, welches eine Aufforderung zur Messung darstellt. Der "Messvorgang" wird gestartet und der Wert wieder zurück an den PC gesendet.
wie jetzt :confused: hab ich da irgendwas nicht richtig verstanden ?
wars das jetzt ? Erst sind alles bömische Dörfer und auf einmal läuft alles ?
also irgendetwas paßt hier jetzt nicht zusammen. Irgendwie fühle ich
mich ein wenig verar...t . Sollte das jetzt nen Test sein wie wir reagieren ?


Dort findet dann die Auswertung statt - ...okay, dass habe ich noch nicht, aber mit PHP wird das schon ;)
Wär ja mal nicht schlecht wenn du das Assembler (oder was weiß ich
für ein Programm) hier reinstellst mit dem du über diese Krüppelhardware
mit dem Tiny13 die Temperaturdaten mißt und per RS232 (oder was weiß ich
wie) zum PC überträgst.


Mein Zusatz:
Das Bit, welches den Messvorgang einleitet, entscheidet darüber, ob die Diode leuchtet oder nicht. PHP wird dann entscheiden, ob eine 1 (Diode an) oder 0 (Diode aus) gesendet wird. Das kann man ja irgendwie mit einbauen...

Vielen Dank! :flowers:

Beste Grüße
- ichwillbis -
Erst geht es nach dem Motto : "Hilfe ich kenne mich überhaupt nicht aus"
und "totaler Laie" als ob nichtmal minimale Kenntnisse vorhanden sind und
dann fällt wie durch ein Wunder was funktionierendes vom Himmel.
Also entweder habe ich hier ne Woche nicht mitbekommen oder was geht
hier eigentlich ab ? ...

Gruß
Dino

ichwillbis
12.02.2011, 00:09
Nabend...

Ja, zwei Nächte, 6 Liter Kaffee und einige Stunden Lesen (und ein paar Erklärung vom Lehrer) und dann ging es eigentlich. Ich meine, irgendwann muss ja was passieren und eine Lösung fällt nicht vom Himmel. Ich habe mir ja nur ein paar Erklärungen, Tipps oder Tricks erhofft und wollte wissen, ob meine Gedankenansätze richtig sind.

Der Fachlehrer meinte auch, dass wir nicht jeden Befehl bis ins kleinste Detail erklären können müssen. Wir haben jetzt auch eine Vorlage von einem ähnlichen Projekt bekommen und mussten es dann "nur noch" umschreiben.

Aber "sbi" und "return" usw. sind jetzt etwas klarer. :rolleyes:

Meine Art der Lösung kann ich aber erst in ein paar Wochen posten -> Ist ja ein Schulprojekt und jeder Mitstreiter sollte zunächst versuchen, es erstmal selbst zu lösen. Damit meine ich nicht, dass ich ihm nicht helfen oder meine "Lösung" nicht erklären würde. ;)


MfG
-Ichwillbis -

dino03
12.02.2011, 01:08
Hi,


Ja, zwei Nächte, 6 Liter Kaffee und einige Stunden Lesen (und ein paar Erklärung vom Lehrer) und dann ging es eigentlich. Ich meine, irgendwann muss ja was passieren und eine Lösung fällt nicht vom Himmel. Ich habe mir ja nur ein paar Erklärungen, Tipps oder Tricks erhofft und wollte wissen, ob meine Gedankenansätze richtig sind.
Also die Mamutsitzung ohne Party und Kino :D


Der Fachlehrer meinte auch, dass wir nicht jeden Befehl bis ins kleinste Detail erklären können müssen. Wir haben jetzt auch eine Vorlage von einem ähnlichen Projekt bekommen und mussten es dann "nur noch" umschreiben.
was vorgefertigtes ... das erklärt auch die Geschwindigkeit bei der Lösung ;)


Aber "sbi" und "return" usw. sind jetzt etwas klarer. :rolleyes:
dann kannst du ja jetzt in Assembler weitermachen :p


Meine Art der Lösung kann ich aber erst in ein paar Wochen posten -> Ist ja ein Schulprojekt und jeder Mitstreiter sollte zunächst versuchen, es erstmal selbst zu lösen. Damit meine ich nicht, dass ich ihm nicht helfen oder meine "Lösung" nicht erklären würde. ;)
na dann laß ich mich mal überraschen wie die Lösung aussieht :cool:

Gruß
Dino

ichwillbis
12.02.2011, 01:39
Hi,
Also die Mamutsitzung ohne Party und Kino :D


Jap, genau.



was vorgefertigtes ... das erklärt auch die Geschwindigkeit bei der Lösung


Naja, als Hilfestellung diente ein Quellcode für eine optische Alarmanlage sowie ein Dimmerungsschalter für die LED. Einfach war's trotzdem nicht, was aber auch keiner erwartet hat...



dann kannst du ja jetzt in Assembler weitermachen

Also ich sehe bei mir bezüglich Assembler keine Zukunft :D

Beste Grüße
- ichwillbis -

ichwillbis
23.06.2011, 21:02
Besteht noch Interesse an der Lösung?

Gruß

dino03
23.06.2011, 21:19
Hallo,


Besteht noch Interesse an der Lösung?
grundsätzlich besteht immer Interesse an Lösungen ;)

Laß dich nicht davon stören wenn mal etwas weniger im Forum los ist oder ein Thread mal ein wenig vor sich hin dümpelt. Es kann sein das die Leute grad zuhause stark eingebunden sind (Kinder, Renovierung, Family, Frau, Garten, ...)

Also immer her damit ;)

Gruß
Dino

ichwillbis
25.06.2011, 01:17
...stark eingebunden sind (Kinder, Renovierung, Family, Frau, Garten, ...)


Also gerade der 4. Punkt klingt nach richtig Arbeit...


Hier die Lösung:

;ADC3.asm, AD-Wandler mit Referenz 1,1 V

.include "tn13def.inc"

.def A = r16
.def B = r17
.def Delay = r18
.def Count = r19

;Port B
.equ TXD = 1
.equ RXD = 2


rjmp Anfang
Anfang:
sbi ddrb,TXD ;Datenrichtung TXD
sbi ddrb,3
sbi portb,3
sbi ddrb,0
rcall AdcInit

Schleife:
rcall RdCOM
rcall schalten
rcall RdADC
rcall WrCOM
rjmp Schleife

AdcInit:
ldi A,3 ;Clock / 4
out ADCSRA,A
sbi ADCSRA,ADEN ;AD einschalten
ret

RdADC:
ldi A,2
out ADMUX,A
sbi ADMUX,ADLAR ;Left adjust
sbi ADMUX,REFS0 ;1,1 V Referenz
sbi ADCSRA,ADSC ;Wandlung starten
ADrdy:
sbic ADCSRA,ADSC
rjmp ADrdy
sbi ADCSRA,ADSC
ADrdyb:
sbic ADCSRA,ADSC
rjmp ADrdyb
in A,ADCH
ret



RdCOM: sbis pinb,RXD ;Empfangen
rjmp RdCOM
ldi Delay,58
D1: dec Delay
brne D1
ldi A,0
ldi Count,8
L1: lsr A
sbic pinb,RXD
ori A,128
ldi Delay, 38
D2: dec Delay
brne D2
dec Count
brne L1
ldi Delay, 38
D3: dec Delay
brne D3
com A
ret

WrCOM: sbi portb,TXD ;Senden
ldi Delay,38
D4: dec Delay
brne D4
ldi Count,8
L2: sbrc A,0
rjmp OFF
rjmp ON
ON: sbi portb,TXD
rjmp BitD
OFF: cbi portb,TXD
rjmp BitD
BitD: ldi Delay,38
D5: dec Delay
brne D5
lsr A
dec Count
brne L2
cbi PORTB,TXD
ldi Delay,38
D6: dec Delay
brne D6
ret

schalten:
ldi b,128
cp a,b
brlo aus
cp a,b
brsh an

ende:
ret

aus:
cbi portb,0
rjmp ende

an:
sbi portb,0
rjmp ende






Und wer auch noch Bock hat, sich's in Excel darstellen zu lassen - hier der VBA Quellcode:

Private Declare Function OPENCOM Lib "RSAPI.DLL" (ByVal COM$) As Integer
Private Declare Function CLOSECOM Lib "RSAPI.DLL" () As Integer
Private Declare Function SENDBYTE Lib "RSAPI.DLL" (ByVal B%) As Integer
Private Declare Function READBYTE Lib "RSAPI.DLL" () As Integer
Private Declare Function SENDSTRING Lib "RSAPI.DLL" (ByVal Raus$) As Integer
Private Declare Function READSTRING Lib "RSAPI.DLL" (ByVal Rein$) As Integer
Private Declare Function TIMEOUT Lib "RSAPI.DLL" (ByVal ms%) As Integer
Private Declare Function STRLENGTH Lib "RSAPI.DLL" (ByVal l%) As Integer
Private Declare Sub STRREAD Lib "RSAPI.DLL" (ByVal Anzeige$)
Private Declare Sub DELAY Lib "RSAPI.DLL" (ByVal ms%)
Private Declare Function TIMEREAD Lib "RSAPI.DLL" () As Long
Private Declare Sub TIMEINIT Lib "RSAPI.DLL" ()

Private Sub CommandButton1_Click()
Static x ' Als Static, sonst immer wieder auf null gesetzt !!

' Schnittstelle COM1 öffnen

I = OPENCOM("COM2:9600,N,8,1")
If I = 0 Then
MsgBox ("Der COM Port ist nicht verfügbar oder wird von einem anderen Programm genutzt!"), vbCritical, "Warnung"
CLOSECOM
Exit Sub
End If

DELAY 50

s = TextBox1.Text

SENDBYTE (s) ' Befehl zum Senden eines Bytes an die Schnittstelle

wert = READBYTE ' Warten auf Empfang eines Bytes von der Schnittstelle

TextBox2.Text = wert ' Ausgeben in Textbox

x = x + 1

Worksheets("Tabelle1").Cells(x, 1).Value = wert ' Zeile, Spalte

End Sub

Der empfangene Wert wird mittels der Formel U = R * I umgerechnet und fertig ist die Temperatur...


Grundlage dafür sind zwei, drei Systemdateien im System32-Ordner, zu denen ich nicht mehr viel sagen kann. Sie initialisieren den COM-Port und bereiten die Schnittstelle vor.


Gruß