Bascom erstes basom programm temp messung

gino

Neues Mitglied
06. Dez. 2013
27
0
0
Vaihingen Enz
Sprachen
  1. BascomAVR
hallo und guten morgen,

bin neu hier und auch neu bei microkontroller Programmierung, hab das ganze zwar vor gute 20 Jahren mal gelernt (8080 Prozessor) aber wer weiß noch was vor 20 jahren war.
durch die ct wordclock bin ich auf die atmega's gekommen und fasziniert was man damit tun kann.
also steckbrett und a bisserl Bauteile anschaffen und los geht's.

das avr Assembler tutorial bei uC habe ich mal durchgearbeitet bin dann aber zu bascom gekommen, verstehe ich einfach besser.
das objektorientierte kapier ich irgendwie nicht, vielleicht hat jemand auch dazu einen tipp.
Also so LED an aus blinken klappt gut.
nun hab ich ein altes LCD Display aus einem Telefon ausgebaut und oh wunder es tut.
also eine Tempanzeige bauen.

diese tut erstaunlich gut, nun wollte ich das Programm hier mal zerpflücken lassen, immerhin hat mir das lesen im Forum geholfen das ding zum laufen zu kriegen.
und da ihr euch mit dem Forum so viel mühe gebt, dürft ihr euch auch über mein Programm lustig machen.

die Funktion ist folgende, 2 temp fühler kty 81-220 per taste umschaltbar.
anzeige als zahl oder in Buchstaben ebenfalls per taster umschaltbar.
das ich die tasten ca. 1 sec drücken muss wegen dem wait im Loop ist mir klar aber eine viel besser lösung ist mir noch net eingefallen.


also bitte ohne scheu sagen was sche... ist, bin ja noch am üben.

gruß
Code:
'Mein Temp Programm
'ATMEGA8 mit 4Mhz ext. Quarz

$regfile = "m8def.dat"
$crystal = 4000000
$hwstack = 22
$swstack = 22
$framesize = 100



Config Portd.0 = Input                                      ' input Taster1 für zahlen oder text anzeige
Config Portd.1 = Input                                      'Taster1 für temp1 oder temp2 auswahl
Config Portc.5 = Output                                     ' led für anzeige zahlen oder buchstaben
Config Portc.4 = Output                                     'led anzeige temp1 oder temp2
Config Portc.3 = Output                                     ' weiß no net
Portc.5 = 1
Portc.4 = 1
Portc.3 = 0

'lcd an portb (20 * 1)
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
   Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4

Config Lcd = 16 * 1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Cursor Off , Noblink

Dim Taster1 As Bit                                          ' flag ob Taster1 gedrückt
Set Taster1
Dim Taster2 As Bit                                          ' flag ob Taster2 gedrückt
Set Taster2
Dim Aktuell As Word                                         'aktuell ausgelesene temp
Reset Aktuell
Dim Tempnow As Single                                       'jetzige temp
Tempnow = 20
Dim Tempvor As Single                                       'Temp Von Letzter Messung
Tempvor = 19
Dim Zahlen(50) As String * 15                               'tabelle für zahlen werte in wörter
Dim Index As Integer
Index = 0
Dim Fuehler As Byte                                         'auswahl temp fühler
Fuehler = 1
' Worttabelle
Zahlen(1) = "Ein"
Zahlen(2) = "Zwei"
Zahlen(3) = "Drei"
Zahlen(4) = "Vier"
Zahlen(5) = "Fuenf"
Zahlen(6) = "Sechs"
Zahlen(7) = "Sieben"
Zahlen(8) = "Acht"
Zahlen(9) = "Neun"
Zahlen(10) = "Zehn"
Zahlen(11) = "Elf"
Zahlen(12) = "Zwoelf"
Zahlen(13) = "Dreizehn"
Zahlen(14) = "Vierzehn"
Zahlen(15) = "Fuenfzehn"
Zahlen(16) = "Sechszehn"
Zahlen(17) = "Siebzehn"
Zahlen(18) = "Achtzehn"
Zahlen(19) = "Neunzehn"
Zahlen(20) = "Zwanzig"
Zahlen(21) = "Einundzwanzig"
Zahlen(22) = "Zweiundzwanzig"
Zahlen(23) = "Dreiundzwanzig"
Zahlen(24) = "Vierundzwanzig"
Zahlen(25) = "Fuenfundzwanzig"
Zahlen(26) = "Sechsundzwanzig"
Zahlen(27) = "Siebundzwanzig"
Zahlen(28) = "Achtundzwanzig"
Zahlen(29) = "Neunundzwanzig"
Zahlen(30) = "Dreissig"
Zahlen(31) = "Einunddreissig"
Zahlen(32) = "Zweiunddreissig"
Zahlen(33) = "Dreiunddreissig"
Zahlen(34) = "Vierunddreissig"
Zahlen(35) = "Fuenfunddreisig"
Zahlen(36) = "Sechsunddreisig"
Zahlen(37) = "Siebunddreissig"
Zahlen(38) = "Achtunddreissig"
Zahlen(39) = "Neununddreissig"
Zahlen(40) = "Vierzig"
Zahlen(41) = "Einundvierzig"
Zahlen(42) = "Zweiundvierzig"
Zahlen(43) = "Dreiundvierzig"
Zahlen(44) = "Vierundvierzig"
Zahlen(45) = "Fuenfundvierzig"
Zahlen(46) = "Sechsundvierzig"
Zahlen(47) = "Siebundvierzig"
Zahlen(48) = "Achtundvierzig"
Zahlen(49) = "Neunundvierzig"

Start Adc                                                   'adc starten



Do                                                          ' temp auslesen
  Aktuell = Getadc(fuehler)                                 ' faktor kty 81-220
  Tempnow = Aktuell * 0.633                                 '-offset die temp stimmt ungefähr (reicht auch)
  Tempnow = Tempnow - 250

                                                           'ausgabe nur wenn sich temp ändert
  If Tempnow <> Tempvor Then Gosub Ausgabe
  Tempvor = Tempnow
  If Pind.0 = 0 Then Gosub Anzeige_taste                    'abfrage ob taste 1
  If Pind.1 = 0 Then Gosub Fuehlerauswahl                   'abfrage ob taste 2
  Wait 1                                                    'warten damit nicht so oft gemessen wird



Loop


'Ende des Programms
End


Ausgabe:
                                                                  'temp als byte
  Index = Tempnow                                           ' display leer
  Cls
  If Taster1 = 0 Then Lcd Zahlen(index) ; " " ; "Grad"      ' wenn anzeige zahlen dann zahlen
  If Taster1 = 1 Then Lcd "Temperatur = " ; Fusing(tempnow , "#.#") ; " C" ; Chr(223)       'wenn anzeige buchstaben dann buchstaben


 Return

Anzeige_taste:


   Waitms 50                                                ' kurz warten entprellen ???
   If Pind.0 = 0 Then Toggle Taster1                        ' anzeige flag umstellen
   If Pind.0 = 0 Then Gosub Changeanzeige                   'anzeige ausgeben


   Return

Fuehlerauswahl:

                                                        'led umschalten
      Toggle Portc.4                                        'wenn fuehler 0 dann 1 und andersrum
      If Fuehler = 0 Then
      Fuehler = 1
      Else
      Fuehler = 0
      End If
      Aktuell = Getadc(fuehler)
      Tempnow = Aktuell * 0.633                             'neue temp anzeigen
      Tempnow = Tempnow - 250


      If Tempnow <> Tempvor Then Gosub Ausgabe
      Tempvor = Tempnow


      Return






Changeanzeige:                                              'neue temp anzeigen
   Cls
   If Taster1 = 0 Then Lcd Zahlen(index) ; " " ; "Grad"
  If Taster1 = 1 Then Lcd "Temperatur = " ; Fusing(tempnow , "#.#") ; " C" ; Chr(223)
  Toggle Portc.5


  Return
 
Hi Gino,

herzlich willkommen im Forum :flowers:

das objektorientierte kapier ich irgendwie nicht, vielleicht hat jemand auch dazu einen tipp.
Objektorientiertes Zeugs ist auch nicht so ganz mein Ding :rolleyes:
Dieses ganze Klassen, Objekte, Methoden, ... :confused: bekomme ich auch nicht so richtig zusammen :p

diese tut erstaunlich gut, nun wollte ich das Programm hier mal zerpflücken lassen, immerhin hat mir das lesen im Forum geholfen das ding zum laufen zu kriegen.
und da ihr euch mit dem Forum so viel mühe gebt, dürft ihr euch auch über mein Programm lustig machen.
Also auf den ersten Blick sah es ganz passabel aus. ;)

die Funktion ist folgende, 2 temp fühler kty 81-220 per taste umschaltbar.
anzeige als zahl oder in Buchstaben ebenfalls per taster umschaltbar.
das ich die tasten ca. 1 sec drücken muss wegen dem wait im Loop ist mir klar aber eine viel besser lösung ist mir noch net eingefallen.

also bitte ohne scheu sagen was sche... ist, bin ja noch am üben.


Na mal sehen ...
Code:
'lcd an portb (20 * 1)
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
   Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
was kleines optisches ... wäre so besser ...
Code:
' ===== lcd an portb (20 * 1) =====
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
   Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
man könnte die Bemerkungen optisch etwas mehr hervorheben wenn sie am Anfang der Zeile stehen. Damit kann man dann auch gleich logische Programmblöcke optisch besser voneinander trennen. Hinter dem Befehl werden die Bemerkungen ja durch den Abstand optisch vom Code getrennt. Am Zeilenanfang ohne irgendeine optische Trennung verschmilzt die Bemerkung schnell mit dem restlichen Code und wird dadurch schnell übersehen.
Ist aber nur nen Vorschlag. Hat aber auch jeder seine eigene Vorliebe ;)


Code:
Dim Tempnow As Single                                       'jetzige temp
Tempnow = 20
Dim Tempvor As Single                                       'Temp Von Letzter Messung
Tempvor = 19
Single verbraucht sehr viel Speicherplatz durch die Variablengröße und die zusätzlichen Rechenroutinen die eingebunden werden. Wenn du die Temperatur nur als Ganzzahl ausgibst, dann versuch auch nur mit Ganzzahl zu rechnen. Notfalls die Werte mit 100 multiplizieren um 1,05° als 105 in der Variable stehen zu haben. Mal so als Tip. Ein Controller hat sehr begrenzte Resourcen.


Code:
If Taster1 = 0 Then Lcd Zahlen(index) ; " " ; "Grad"
...
...
Dim Zahlen(50) As String * 15                               'tabelle für zahlen werte in wörter
Dim Index As Integer
Index = 0
Dim Fuehler As Byte                                         'auswahl temp fühler
Fuehler = 1
' Worttabelle
Zahlen(1) = "Ein"
Zahlen(2) = "Zwei"
Zahlen(3) = "Drei"
Zahlen(4) = "Vier"
Zahlen(5) = "Fuenf"
...
Zahlen(45) = "Fuenfundvierzig"
Zahlen(46) = "Sechsundvierzig"
Zahlen(47) = "Siebundvierzig"
Zahlen(48) = "Achtundvierzig"
Zahlen(49) = "Neunundvierzig"
Der "Index" wird nur von 0-49 verwendet. Warum benutzt du dann eine Integer-Variable (2Byte) und keine Bytevariable? Spart Platz :cool:
Außerdem verbrätst du mit dem Array ganz schön viel SRAM von dem der Mega8 nicht viel hat. Das könnte man über einen Data-Bereich im Flash platzsparender lösen. Der Mega8 hat nur 1024Byte SRAM. Davon hast du im WorstCase mit dem Array bereits 50x16Bytes belegt (=800Byte) Dazu kommen 100Byte für deine Framegröße und 2x22Byte für Sw+Hw-Stack. Also schonmal gesamt 944Bytes bereits verbraten :p Macht 80Bytes Rest. Weitere Variablen ...
2x Bitvariable (1 Byte als Platzverbrauch?)
1x Bytevariable
1x Word (2Byte)
1x Integer (2Byte)
2x Single (2x 4Byte = 8Byte)
weitere 14Bytes. Also bleiben noch etwa 66Bytes SRAM als Rest (wenn ich mich nicht verrechnet habe). Für so ein kleines Programm schon ein recht heftiger Platzverbrauch :rolleyes: Der größte unnütze SRAM-Fresser ist dabei dein Array.


Code:
Do                                                          ' temp auslesen
  Aktuell = Getadc(fuehler)                                 ' faktor kty 81-220
  Tempnow = Aktuell * 0.633                                 '-offset die temp stimmt ungefähr (reicht auch)
  Tempnow = Tempnow - 250
                                                           'ausgabe nur wenn sich temp ändert
  If Tempnow <> Tempvor Then Gosub Ausgabe
  Tempvor = Tempnow
  If Pind.0 = 0 Then Gosub Anzeige_taste                    'abfrage ob taste 1
  If Pind.1 = 0 Then Gosub Fuehlerauswahl                   'abfrage ob taste 2
  Wait 1                                                    'warten damit nicht so oft gemessen wird

Loop
Das "Wait 1" ist wie bereits von dir bemerkt recht "suboptimal". Mach notfalls nen Byte-Schleifenzähler und nur nen "Waitms 4" dann hast du beim Zählerstand von 250 deine Sekunde voll. Mit ner ...
IF schleifenzaehler>250 THEN
schleifenzaehler=0
... dann der Rest aus der Do-Loop der nur 1x pro Sekunde laufen soll
END IF
... kannst du auch ohne Timer mit einfachen Mitteln dein Programm etwas verbessern. Mit Timer wäre das natürlich komplett ohne Waitbefehle und am besten.


Code:
  If Pind.0 = 0 Then Gosub Anzeige_taste                    'abfrage ob taste 1
...
Anzeige_taste:
   Waitms 50                                                ' kurz warten entprellen ???
   If Pind.0 = 0 Then Toggle Taster1                        ' anzeige flag umstellen
   If Pind.0 = 0 Then Gosub Changeanzeige                   'anzeige ausgeben
Return
10ms fürs Entprellen reicht normalerweise allemal. Selbst mit 5ms sollte man bei vernünftigen Tastern meißt hinkommen. Allerdings würde im Interprogramm dann eigentlich eine Abfrage reichen ...
Code:
  If Pind.0 = 0 Then Gosub Anzeige_taste                    'abfrage ob taste 1
...
Anzeige_taste:
   Waitms 10                                                ' kurz warten entprellen ???
   If Pind.0 = 0 Then
       Toggle Taster1                        ' anzeige flag umstellen
       Gosub Changeanzeige                   'anzeige ausgeben
   End If
Return
Zusammen auszuführende Operationen sollten auch zusammen in einer Bedingung stehen. Bei Datenbanken nennt man das Transaktionen und bei Programmen könnten sonst "Race Conditions" auftreten. Daher ... die erste Operation wird ausgeführt aber in der Zwischenzeit hat sich der Zustand geändert und die zweite wird dadurch nicht ausgeführt.

Soweit erstmal. ;) Fürs erste aber schon recht ordentlich. :cool:
Aber immer dran denken. Ein Controller ist kein Computer.
Denk mal an den ZX81 mit 1k RAM und 8k ROM :cool:
y=x^2 hat da gegenüber y=x*x mehr Platz verbraucht.
Außerdem wurden teilweise Zahlen in Variablen abgelegt weil sie dann nur einmal Platz verbraucht haben. zB ..
z=10
a=v*z ---> also mal 10
b=w+z*z --> und nun mal 100
Da das ZX-Basic nen Interpreter war hat die 10 2Bytes im Speicher verbraucht und das z nur 1Byte.
Da wurden auch noch einige Klimmzüge mehr gemacht um da alles reinzupressen. Auf dem Stand bist du nun wieder.
Oft genug wirst du dich zwischen Platzverbrauch im Speicher und Ausführungsgeschwindigkeit entscheiden müssen.

Gruß
Dino
 
guten abend,

super, danke für die ausführliche info, endlich mal ein Forum wo die antworten nicht nach der regel ablaufen, googlen hilft auch.
also ob das die leute "hoffentlich" nicht schon tun würden.

das mit den doppelten if abfragen ist mir klar und klappt auch spontan. wie ich die Tabelle im Flash ablegen soll ist mir nicht klar, leider auch nicht wonach ich da in der hilfe schauen soll.
was mir in meiner Version noch am anfang aufgefallen ist, wenn die Tabelle am schluss des programms steht, tuts nicht, warum ????

die timer sind hauptsächlich besser als wait, wegen der Reaktion auf den taster oder.
habs auch mal mit int0 und int1 programmiert, hat zwar funktioniert aber war eigentlich nicht anderst.


gruß gino
 
Hallo Gino,
auch erstmal Herzlich Willkommen von mir
:party:

Ich denke nicht das du was dummes geschrieben hast.
Du solltest einfach daran denken das die Leute nicht immer sofort Zeit haben, gerade jetzt in der Vorweihnachtszeit,
oder das andere wie ich zum Beispiel dir bei Bascom einfach nicht weiterhelfen können.

Warte einfach noch ein bisschen dann wird sich bestimmt jemand finden der dir weiterhelfen kann.
 
Hi Gino,

nein du hast nix dummes geschrieben. Ich hab an dem Tag nur grade keine genaue Info gehabt wie das in Bascom geht das man direkt die Data-Elemente adressiert. Einen ganzen Datenbereich einlesen hab ich schon gemacht. Da könnte ich was schreiben aber eben keine direkte Adressierung der Data-Elemente im Flash. In Assembler ist das gar kein Thema. Da hab ich das schon zur Genüge verwendet. Das wird dir aber wohl nicht weiterhelfen. Müßte ich mich also selber erstmal kurz einlesen.

Heute bin ich auch grade von der betrieblichen Weihnachtsfeier zurück. Also da wird heute leider auch nicht mehr viel von meiner Seite passieren. :eek:

Gruß
Dino
 
Von mir auch ein herzliches Willkommen :)

Ich sehe jetzt auch nichts verwerfliches in deinem Code.

Aber ich würde dir anraten (das mach ich immer) mit Prefixen zu arbeiten.

Dass bei:
Code:
Dim i As Integer
For i = 0 to 10
    ' whatever
Next
i ein Integer ist ist offensichtlich. Aber bei "globalen" - also Projektweiten - Variablen würde ich immer ein Prefix vor den Variablennamen setzen. z. B.:
Code:
Dim bByteEmpfangen As Boolean ' (oder war es Bit in Bascom?)
Dim yPosition As Byte ' (y weil b schon bei Boolean / Bit genutzt)
Dim wCounter As Word
Dim iWasAuchImmer As Integer
Manche nutzen auch 3 Buchstaben zur Kennzeichnung (int/str/bol/...). Das bleibt jedem selber überlassen. Man sollte nur immer das Selbe nutzen :)

Das macht es manchmal leichter einen Code zu verstehen :)
Ändert aber an der Funktion nichts.
 
Hi,

dann schreib ich auch mal was dazu...

Am Anfang konfigurierst Du Deine Beinchen. Ich weiß jetzt nicht, inwiefern Du Dich mit den Interna des Controllers auskennst - trotzdem hol ich mal ein wenig aus:
Der Controller hat mehrere Ports (im Sinne eines Busses A,B,C,D usw - nicht immer alle), die über bis zu 8 Beinchen verwalten. Jeder Port verfügt dazu über 3 "Steuerregister" - eines in dem der Ist-Zustand des Beines ausgelesen werden kann (PIN wie Input), eines in dem die Richtung des Beinchens vorgegeben wird (DDR - DataDirectionRegister), und eines das quasi den "Pegel" des Beinchens festlegt (heißt dummerweise auch PORT-Register) - allerdings in Abhängigkeit der festgelegten Richtung:
bei einem Ausgang wird der Pegel zugewiesen -> also Vcc oder Gnd, belastbar bis 20mA
bei einem Eingang wird entweder hi über einen Pullup (zwischen 50 und 100 kOhm oder so) und open/tristate umgeschaltet.

Mit Config PORTx.y = input/output wird also das DDR-Register beschrieben.
Mit Portx.y=n (n={0,1}) hingegen das Port-Register.

Wenn Du das so Bitweise machst, werden wirklich nacheinander die entsprechenden Bits in den Registern festgelegt - teilweise sogar über ReadModifyWrite-Operationen (das Register wird in ein Rechenregister geladen, mit einer logischen Operation wird das konkrete Bit gesetzt/gelöscht, das Byte wird zurückgeschrieben - wenn Du danach ein anderes Bit desselben Registers manipulierst, das ganze halt nochmal, nur eben mit einem anderen Bit).

Jetzt nochmal kurz: Du kannst Bits, die ein Register (also einen Port im Sinne der zusammengefassten Beinchen (A,B,...)) betreffen auch in einem Rutsch manipulieren, allerdings werden dabei alle Bits entsprechend zugewiesen:
Für die Datenrichtung: Config Portx=zahl (x={A,B,...}, zahl=binäre Zahl, jedes Bit repräsentiert das korrespondierende Beinchen)
(diejenigen, die von Assembler zu Bascom kommen verwenden hier gern DDRx=zahl, oben erklärt warum)
Für den "Pegel": Portx=zahl

2tens: Ich benenne auch die "Beinchen" die ich auswerte oder setze ganz gern entsprechend ihrer Funktion. Das verbessert die Lesbarkeit des Codes (auch wenn man Kommentare hat). Inwiefern sich das mit Bascom gut machen läßt, ist mir nicht ganz klar - mit ALIAS solltest Du 'n Suchbegriff für die Bascom-Hilfe haben.

3tens: Dein eigentliches "Problem" war ja daß das Warten am Ende der Schleife das Programm blockiert - insbesondere die Abfrage der Taster.
Um das zu verbessern, muß man die Abarbeitung der Schleife etwas verändern:
Einerseits hast Du die Abfrage und Reaktion der Taster, andererseits die Abfrage/Reaktion auf den ADC. Also 2 Blöcke, wobei nur der letzte nicht ständig (bei jedem Schleifendurchlauf) abgearbeitet werden soll. Statt zu warten brauchst Du also eine Bedingung (SekundeIstRum), auf die Du mit 'nem IF-Then-Block reagieren kannst. Woher bekommst Du nun diese Bedingung? Wenn Du die Durchlaufzeit der Schleife kennst (obwohl die ja nicht konstant ist), könntest Du einfach eine Variable inkrementieren lassen, und eben alle x Schleifendurchläufe diesen Block ausführen lassen. Allerdings wäre dann nach jeder Code-Änderung x anzupassen.
Besser ist es, eine unabhängige Zeitbasis zu nutzen - der Controller bietet Dir dazu mehrere Hardware-Timer an. Du könntest einen so konfigurieren, daß er nach'ner Sekunde (oder irgend'ner anderen gut gewählten Zeit) überläuft. An den Überlauf wird ein Interrupt gekoppelt, der nur die "SekundeIstRum"-Variable (=Statusflag) entsprechend manipuliert. In der Hauptschleife reagierst Du dann entsprechend mit 'ner If-Verzweigung darauf, und setzt das Statusflag zurück.

4tens: erzeugt das "end" hinter dem "loop" nur "toten" Code. Konkret erzeugt end einfach eine leere Endlosschleife, damit das Programm nicht den ganzen weiteren Program-Flash durchläuft, und wieder von vorn beginnt. Da Deine loop aber bereits 'ne Endlosschleife ist (wenn auch nicht leer:D), wird diese End-Schleife nie erreicht.
 
Äh vielen dank, ich versuch das mal zu reflektieren was ich glaube kapiert zu haben.

1. zuweisen ganzer ports statt einzelner bits. Spart geschwindigkeit platz, ebenso wie das korrekte anpassend er variablen je nach bedarf, also kein integr wenn byte genügt.

2. statt des waits der alles blockiert lieber eine hardware timer verwenden, wenn ich das richtig verstehe reagiet mein programm ohne verzögerung auf z.b. Taster etc.

Hab ich das richtig interpretiert.

Achja aliase sind klar und sinnvoll, ebenso die prefixe, vielen dank ich hab bestimmt noch weite fragen.

Gruss
 
Hi,

Äh vielen dank, ich versuch das mal zu reflektieren was ich glaube kapiert zu haben.

1. zuweisen ganzer ports statt einzelner bits. Spart geschwindigkeit platz, ebenso wie das korrekte anpassend er variablen je nach bedarf, also kein integr wenn byte genügt.
stimmt. Ein Controller hat keine Festplatte und 4GByte SRAM so wie ein PC. Du mußt an allen Ecken und Enden knausern.

2. statt des waits der alles blockiert lieber eine hardware timer verwenden, wenn ich das richtig verstehe reagiet mein programm ohne verzögerung auf z.b. Taster etc.
stimmt auch. Warten verbrennt nur Prozessorzeit in der er nichts anderes machen kann. Du mußt Aktionen möglichst parallel abarbeiten lassen. Das verlangt am Anfang ein wenig Umdenken. Nachher geht das mehr und mehr automatisch in die Gedankengänge ein. Der Controller hat extra Hardwarefunktionen um Sachen selber im Hintergrund ausführen zu können. Also laß ihn das doch machen. Das spart Platz im Flash und Ausführungszeit die du für anderes besser verwenden kannst.

Hab ich das richtig interpretiert.

Achja aliase sind klar und sinnvoll, ebenso die prefixe, vielen dank ich hab bestimmt noch weite fragen.
soweit richtig interpretiert.

Aliase verwende ich teilweise auch. Prefixe verwende ich eher nicht.

Aliase erleichtern dir nachher eine Anpassung des Quellcodes an einen anderen Controller. Stell dir vor du hast mehrere Tasten und LEDs. Wenn du nun merkst das der Controller doch etwas klein ist oder die Tasten/LEDs vom Platinenlayout doch besser wo anders aufgehoben wären, dann müßtest du den gesamten Quellcode nach den Ports durchsuchen und alles per Hand ändern. Wenn du am Anfang Aliase definiert hast, dann mußt du nur diese Definition anpassen und schon läuft wieder alles.

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)