Willkommen in unserer Community

Werde Teil unserer Community und registriere dich jetzt kostenlos ...

Registrieren
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Temparatur Messen und grafisch darstellen - Attiny13

Dieses Thema im Forum "Software" wurde erstellt von ichwillbis, 7. Februar 2011.

  1. ichwillbis

    ichwillbis
    Expand Collapse
    Neues Mitglied

    Registriert seit:
    6. Februar 2011
    Beiträge:
    8
    Zustimmungen:
    0
    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 -
     
  2. dino03

    dino03
    Expand Collapse
    Moderator
    Mitarbeiter

    Registriert seit:
    27. Oktober 2008
    Beiträge:
    6.461
    Zustimmungen:
    1
    Sprachen:
    BascomAVR, Assembler
    Hallo,

    willkommen im forum :flowers:

    ä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:

    Wenigstens schon einmal programmiert ? Wenn ja was ?
    Schon einmal irgendwas mit Elektronik gebastelt ?

    Tja ... der Schaltplan liegt mir leider nicht vor. Darum kann ich auch nichts
    sagen was die Meßmethode angeht.

    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 ....

    :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:

    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
     
  3. ichwillbis

    ichwillbis
    Expand Collapse
    Neues Mitglied

    Registriert seit:
    6. Februar 2011
    Beiträge:
    8
    Zustimmungen:
    0
    2. Versuch

    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 -
     

    Anhänge:

  4. Cassio

    Cassio
    Expand Collapse
    Moderator
    Mitarbeiter

    Registriert seit:
    29. Oktober 2008
    Beiträge:
    3.931
    Zustimmungen:
    1
    Sprachen:
    BascomAVR
    Hallo !

    Da ich weder ASM noch C beherrsche, kann ich dir programmiertechnisch leider nicht helfen. :eek:
    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 ! hinein!


    Wünsche trotzdem viel Spaß dabei,
    Cassio
     
  5. LotadaC

    LotadaC
    Expand Collapse
    Aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    1.978
    Zustimmungen:
    2
    Sprachen:
    BascomAVR, Assembler
    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?
     
  6. dino03

    dino03
    Expand Collapse
    Moderator
    Mitarbeiter

    Registriert seit:
    27. Oktober 2008
    Beiträge:
    6.461
    Zustimmungen:
    1
    Sprachen:
    BascomAVR, Assembler
    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
     
  7. LotadaC

    LotadaC
    Expand Collapse
    Aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    1.978
    Zustimmungen:
    2
    Sprachen:
    BascomAVR, Assembler
    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?
     
  8. ichwillbis

    ichwillbis
    Expand Collapse
    Neues Mitglied

    Registriert seit:
    6. Februar 2011
    Beiträge:
    8
    Zustimmungen:
    0
    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 -
     
  9. oldmax

    oldmax
    Expand Collapse
    Mitglied

    Registriert seit:
    3. November 2008
    Beiträge:
    512
    Zustimmungen:
    0
    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
    Code:
    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
    Code:
    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
     
  10. dino03

    dino03
    Expand Collapse
    Moderator
    Mitarbeiter

    Registriert seit:
    27. Oktober 2008
    Beiträge:
    6.461
    Zustimmungen:
    1
    Sprachen:
    BascomAVR, Assembler
    Hallo zusammen,

    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.

    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
    - 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.

    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.

    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).

    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
     
  11. ichwillbis

    ichwillbis
    Expand Collapse
    Neues Mitglied

    Registriert seit:
    6. Februar 2011
    Beiträge:
    8
    Zustimmungen:
    0
    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 -
     
  12. dino03

    dino03
    Expand Collapse
    Moderator
    Mitarbeiter

    Registriert seit:
    27. Oktober 2008
    Beiträge:
    6.461
    Zustimmungen:
    1
    Sprachen:
    BascomAVR, Assembler
    Hi,

    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 ?

    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.

    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
     
  13. ichwillbis

    ichwillbis
    Expand Collapse
    Neues Mitglied

    Registriert seit:
    6. Februar 2011
    Beiträge:
    8
    Zustimmungen:
    0
    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 -
     
  14. dino03

    dino03
    Expand Collapse
    Moderator
    Mitarbeiter

    Registriert seit:
    27. Oktober 2008
    Beiträge:
    6.461
    Zustimmungen:
    1
    Sprachen:
    BascomAVR, Assembler
    Hi,

    Also die Mamutsitzung ohne Party und Kino :D

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

    dann kannst du ja jetzt in Assembler weitermachen :p

    na dann laß ich mich mal überraschen wie die Lösung aussieht :cool:

    Gruß
    Dino
     
  15. ichwillbis

    ichwillbis
    Expand Collapse
    Neues Mitglied

    Registriert seit:
    6. Februar 2011
    Beiträge:
    8
    Zustimmungen:
    0
    Jap, genau.

    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...

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

    Beste Grüße
    - ichwillbis -
     
  16. ichwillbis

    ichwillbis
    Expand Collapse
    Neues Mitglied

    Registriert seit:
    6. Februar 2011
    Beiträge:
    8
    Zustimmungen:
    0
    Besteht noch Interesse an der Lösung?

    Gruß
     
  17. dino03

    dino03
    Expand Collapse
    Moderator
    Mitarbeiter

    Registriert seit:
    27. Oktober 2008
    Beiträge:
    6.461
    Zustimmungen:
    1
    Sprachen:
    BascomAVR, Assembler
    Hallo,

    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
     
  18. ichwillbis

    ichwillbis
    Expand Collapse
    Neues Mitglied

    Registriert seit:
    6. Februar 2011
    Beiträge:
    8
    Zustimmungen:
    0
    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ß
     

Diese Seite empfehlen