-
        

Ergebnis 1 bis 5 von 5

Thema: Brache Hilfestellung bei Programmierung mit C-Control/ASM

  1. #1

    Brache Hilfestellung bei Programmierung mit C-Control/ASM

    Anzeige

    Guten Tag zusammen,
    nach langem suchen im Internet und auf unendlich vielen Hotlines müssen wir jetzt leider endgültig feststellen, dass wir an dieser stelle nicht weiterkommen.
    Es geht um folgendes:
    Wir, also drei meiner Kollegen und ich, sind in Mönchengladbach auf der Fachhochschule für Technik und Medien und streben hier unseren Elektrotechnikertitel an. Momentan haben wir die so genannten Projektwochen, d.h. wir selbst haben uns eine Problemstellung gesucht, die es zu lösen gilt. Wir nennen unser Thema „Entwicklung und Aufbau eines Medikamenten-Einnahme-Erinnerungs-Timer“ kurz MEET. Wir wollen also ein Batteriebetriebenes Handgerät entwickeln mit der M I Unit als Herzstück. Ein Arzt soll später über eine Visual Basic 6.0 Oberfläche die Möglichkeit haben:
    1. Einen Medikamentennamen (z.B. „Hustentropfen“)
    2. Eine Menge (z.B. „3“)
    3. Eine Einheit (z.B. „ml“)
    4. Eine Einnahme Empfehlung (z.B. „mit Wasser verdünnt einnehmen“)
    5. Eine Uhrzeit zu der das Medikament eingenommen werden soll (z.B. „14.00h“)
    6. Ein Startdatum ab wann das Medikament zu ersten mal eingenommen wird (z.B. „22.02.2005“)
    und 7. Einen Intervall (z.B. ab Startdatum „täglich“ oder „alle zwei Tage“….)
    auf den Mikrokontroller zu schicken und zu speichern.

    Der Kontroller soll dann die mit der DCF-77 empfangene Uhrzeit mit der vom Arzt angegebenen Uhrzeit und Datum vergleichen und bei Übereinstimmung die Punkte 1 bis 4 auf das Vierzeilige Display ausgeben.
    Hier kommt unser Problem:
    Wie bekommen wir die Die Punkte 1 – 6 in dem EEPROM des Controllers im laufenden Betrieb als Zeichenketten so gespeichert, das einzelne Teile z.B. die Uhrzeit ausgelesen werden können um sie zu vergleichen um dann einzelne Teile wie z.B. Med.Name, Menge, Einheit, Empfehlung passend zu der richtigen Uhrzeit ausgegeben werden können auch wenn mehrere dieser Punkte 1 – 6 vorhanden sind ( Meist gilt es ja mehrere Medikamente zu verschiedenen Zeiten einzunehmen ).

    Da wir dazu die genauen Angaben der Speicheradressen der einzelnen String angeben müssten ist diese Problem wahrscheinlich ja nur über die Assemblerprogrammierung möglich. (Vorschläge mit C-Control währen noch lieber)
    Den passenden Assembler der dem Buch mit der Bestellnummer Conrad : 919179 beiliegt ist laut Aussagen mehrerer ihrer Kollegen nicht mehr erhältlich!
    Bitte schicken sie uns Lösungsansätze oder Lösungen per Email zu!
    Michael.Erkes@t-online.de;
    Micha2010@freenet.de;
    Herrrossy1@gmx.de;
    Cruecke@web.de

    Das Fach Projektarbeit wird zu einer eigenen Abschluss - Zeugnisnote zum Techniker und ist somit sehr wichtig für uns.
    Wir müssen bis Mitte nächster Woche damit fertig sein.

    Würden uns über schnelle Antworten und Lösungsvorschläge freuen, da wir unter starken Zeitdruck stehen!

    Mit freundlichen Grüßen
    Michael E.
    Rainer O.
    Christian R.
    Ronald G.




    '*** Daten-Definition ***

    define lcd_buf byte
    define lcd_param byte
    define daten byte
    define position byte

    define light port[2]
    light=on

    ' *** Definition LCD-Ports ***
    define lcd_port byteport[2]
    define lcd_rs port[14]
    define lcd_rw port[13]
    define lcd_e port[15]


    '*** ASCII-Codes ***
    define A_ &H41
    define B_ &H42
    define C_ &H43
    define D_ &H44
    define E_ &H45
    define F_ &H46
    define G_ &H47
    define H_ &H48
    define I_ &H49
    define J_ &H4A
    define K_ &H4B
    define L_ &H4C
    define M_ &H4D
    define N_ &H4E
    define O_ &H4F
    define P_ &H50
    define Q_ &H51
    define R_ &H52
    define S_ &H53
    define T_ &H54
    define U_ &H55
    define V_ &H56
    define W_ &H57
    define X_ &H58
    define Y_ &H59
    define Z_ &H5A
    define ka_ &H61
    define kb_ &H62
    define kc_ &H63
    define kd_ &H64
    define ke_ &H65
    define kf_ &H66
    define kg_ &H67
    define kh_ &H68
    define ki_ &H69
    define kj_ &H6A
    define kk_ &H6B
    define kl_ &H6C
    define km_ &H6D
    define kn_ &H6E
    define ko_ &H6F
    define kp_ &H70
    define kq_ &H71
    define kr_ &H72
    define ks_ &H73
    define kt_ &H74
    define ku_ &H75
    define kv_ &H76
    define kw_ &H77
    define kx_ &H78
    define ky_ &H79
    define kz_ &H7A
    define A1_ &H31
    define A2_ &H32
    define A3_ &H33
    define A4_ &H34
    define A5_ &H35
    define A6_ &H36
    define A7_ &H37
    define A8_ &H38
    define A9_ &H39

    define LEERZ &H20
    define MINUS &H2D
    define NULL &H30
    define GLEICH &H3D
    define DOPPELPUNKT &H3A
    define PUNKT &H2E
    define KOMMA &H2C
    define FRAGEZ &H3F


    '*** Programmoperationen ***

    GoSub LCD_INIT

    #loop
    position = 0
    lcd_param = 1: GoSub LCD_GOTOLINE

    lcd_param = Null + Day / 10: GoSub LCD_WRITECHAR
    lcd_param = Null + Day Mod 10: GoSub LCD_WRITECHAR
    lcd_param = PUNKT: GoSub LCD_WRITECHAR
    lcd_param = Null + Month / 10: GoSub LCD_WRITECHAR
    lcd_param = Null + Month Mod 10: GoSub LCD_WRITECHAR
    lcd_param = PUNKT: GoSub LCD_WRITECHAR
    lcd_param = Null + Year / 10: GoSub LCD_WRITECHAR
    lcd_param = Null + Year Mod 10: GoSub LCD_WRITECHAR
    lcd_param = leerz: GoSub LCD_WRITECHAR
    lcd_param = leerz: GoSub LCD_WRITECHAR
    lcd_param = leerz: GoSub LCD_WRITECHAR
    lcd_param = leerz: GoSub LCD_WRITECHAR
    lcd_param = leerz: GoSub LCD_WRITECHAR
    lcd_param = leerz: GoSub LCD_WRITECHAR
    lcd_param = Null + Hour / 10: GoSub LCD_WRITECHAR
    lcd_param = Null + Hour Mod 10: GoSub LCD_WRITECHAR
    lcd_param = doppelpunkt: GoSub LCD_WRITECHAR
    lcd_param = Null + Minute / 10: GoSub LCD_WRITECHAR
    lcd_param = Null + Minute Mod 10: GoSub LCD_WRITECHAR


    lcd_param = 2: GoSub LCD_GOTOLINE

    lcd_param = M_: GoSub LCD_WRITECHAR
    lcd_param = e_: GoSub LCD_WRITECHAR
    lcd_param = d_: GoSub LCD_WRITECHAR
    lcd_param = i_: GoSub LCD_WRITECHAR
    lcd_param = k_: GoSub LCD_WRITECHAR
    lcd_param = a_: GoSub LCD_WRITECHAR
    lcd_param = m_: GoSub LCD_WRITECHAR
    lcd_param = e_: GoSub LCD_WRITECHAR
    lcd_param = n_: GoSub LCD_WRITECHAR
    lcd_param = t_: GoSub LCD_WRITECHAR
    lcd_param = doppelpunkt: GoSub LCD_WRITECHAR


    lcd_param = 4: GoSub LCD_GOTOLINE

    lcd_param = D_: GoSub LCD_WRITECHAR
    lcd_param = o_: GoSub LCD_WRITECHAR
    lcd_param = s_: GoSub LCD_WRITECHAR
    lcd_param = i_: GoSub LCD_WRITECHAR
    lcd_param = s_: GoSub LCD_WRITECHAR
    lcd_param = doppelpunkt: GoSub LCD_WRITECHAR


    '******** Eingabe ***************

    '************************************************* ************************************************** **********

    #init1

    lcd_param = 3: GoSub LCD_GOTOLINE
    GoTo eingabe1

    #eingabe1
    baud r1200
    get daten

    'Andieser Stelle soll nicht das von Vicual Basic 6
    'eingegebene Zeichen/Wort (hier ein bestimmtes Medikament)
    'auf dem Display erscheinen sondern sollte im EEPROM
    'gespeichert und zu einer gewissen Uhrzeit ausgegeben. werden)
    'Geht das nur über Assembler??? Und wenn ja - wie???
    'Vielen Dank im Voraus.


    position = position + 1
    If position = &H15 Then GoTo posi
    If daten = leerz Then GoTo init2
    lcd_param = daten: GoSub LCD_WRITECHAR
    GoTo eingabe1



    #init2

    lcd_param = 4: GoSub zeile4
    GoTo eingabe2

    #eingabe2
    baud r1200
    get daten
    position = position + 1
    if position=&h0e then goto loop
    if daten = leerz then goto loop
    lcd_param = daten: GoSub LCD_WRITECHAR
    GoTo eingabe2

    #zeile4
    If lcd_param = 4 Then lcd_param = &HE6
    GoTo LCD_WRITECMD

    #posi

    position = 0
    GoTo init2
    '************************************************* ************************************************** ***************



    '*** LCD_Interface ***

    #LCD_INIT

    ' alle ports 0
    lcd_port = OFF

    ' 8-Bit-Modus aktivieren
    lcd_param = &H34: GoSub LCD_WRITECMD

    ' mit 8-Bit-Command in 4-Bit-Modus umschalten
    lcd_port=&B00000010
    tog lcd_e
    tog lcd_e

    ' ab jetzt 4-Bit-Modus
    lcd_param = &H9: GoSub LCD_WRITECMD ' Umstellung auf 4 Zeilen Modus
    lcd_param = &H28: GoSub LCD_WRITECMD
    lcd_param = &HC: GoSub LCD_WRITECMD

    ' Display loeschen
    #LCD_CLS
    lcd_param = &H2: GoSub LCD_WRITECMD
    lcd_param = &H1: GoSub LCD_WRITECMD
    Return

    ' Zeilenwechsel
    #LCD_GOTOLINE
    If lcd_param = 1 Then lcd_param = &H80
    If lcd_param = 2 Then lcd_param = &H94
    If lcd_param = 3 Then lcd_param = &HC0
    If lcd_param = 4 Then lcd_param = &HD4

    GoTo LCD_WRITECMD

    ' LCD-Kommando
    #LCD_WRITECMD
    lcd_buf = OFF
    GoTo LCD_WRITE

    ' Zeichenausgabe
    #LCD_WRITECHAR
    lcd_buf = &B00100000

    ' Kommando oder Zeichen an Display senden
    #LCD_WRITE
    lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
    tog lcd_e
    tog lcd_e
    lcd_port = lcd_buf Or (lcd_param And &HF) ' Lo-Nibble
    tog lcd_e
    tog lcd_e
    Return



  2. #2

    Oh,Oh

    [ [-o<
    Also ihr habt ein echt großes Problem!!!!
    Informiert mich mal, wenn ihr weiter kommt[/b]

  3. #3

    Jetzt ma in echt!!!


    Also mit dem Befehl 'open#' kann man daten speichern und auch lesen im modus read.
    Ihr könnt zwar nur integer zahler speichern aber das reicht ja.
    Ihr müsst einmal die daten speichern und am anfang des programms die daten auslesen!!!


  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    14.11.2003
    Beiträge
    813
    Aeh, eine Zwischenfrage,
    Wieviel RAM hat denn die C-Controll. Kann die ueberhaupt soviel "define" speichern ?

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.06.2004
    Ort
    Düsseldorf
    Alter
    33
    Beiträge
    158
    Hallo,

    also die alte C-Control hat grade mal 24 Byte Ram. Die M Unit 2.0 hat 64 Byte (vielleicht tut sich da aber noch was, man kann nie wissen). Beide Controller können weitere Daten ins EEPROM bzw. Flash speichern und daraus lesen. Das Problem ist, dass man nicht direkt (ohne Assembler) auf eine Speicherstelle des Speichers (nicht RAM Speicher) zugreiffen kann. Will man das kann man zum Beispiel ein externes EEPROM über IIC Bus ansteuern. Man muss hier bedenken, dass die Ansteuerung etwas komplizierter und vorallem zeitaufwendiger wird!

    Konstanen mit "DEFINE i = 1" bzw in BASIC++ "CONST i = 1" nehmen keinen Platz im RAM weg. Sie nehmen nur BASIC Speicher weg, sobald sie aufgerufen werden (im Prinzip ist eine Konstante ein Platzhalter für einen numerischen Wert).

    Gruß,

    Stefan
    http://www.tappertzhofen.eu/bpp2

    Basic++ Programmiersprache
    für den C-Control I Mikrocontroller

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •