Forum: Mikrocontroller und Digitale Elektronik Eins zwei Anfänger fragen ;)


von Dennis Brücke (Gast)


Lesenswert?

Erstmal Hi @all,

der Begriff Anfänger ist vieleicht ein wenig zu sehr aus gedrückt,
aber noch passend. Ich beschäftige mich zum allerersten mal mit uC´s
habe mich dennoch dazu entschlossen direkt mit ASM einzusteigen.
Halte nicht so viel von C oder Bascom ;)

Ok habe mir ein Testboard gebastelt mit einen ATMega8 dazu ein
2 x 20 Display HD44780, MAX232 für RS232 etc...

So jetzt habe ich eigendlich schon viele tolle Dinge gemacht
UART, Tasten entprellen etc...

Text auf Display funktioniert auch. Aber wie kann ich z.B.:

- Text auf dem Display ausgeben, das die 1. Zeile Fixiert ist
  (stehender Text) und die 2. Zeile z.b eine Art Laufschrift hat,
   bzw. einlaufenden Text. Bisher hab ich es immer nur hinbekommen
   das beide zeile sich verschoben habe. (Shift)

- Wie funktioniert das mit den Interrupts (habe schon einiges durch
  an dokus, nur so richtig verstehen tue ich das nicht.

- Ebenso was die Timer betrifft.

- Warum finde ich bei einigen Samples im Internet die Tags ".list"
bzw
  ".nolist" sowie .org etc... Welche sollte man auf jedenfall am
  anfang vom Source setzen?

Ich bedanke mich jetzt schonmal bei allen die sich die mühe machen, das
durchzulesen und zu Antworten. Ich möchte natürlich jetzt keine
kompletten Anleitungen (die gibt es ja schon zu genüge) aber der ein
oder Andere anschubser währe super. Wie z.b. mit der Laufschrift, das
gehört z.b. zu den Problemen die ich noch nicht gelöst habe.

Gruß Dennis

von leo9 (Gast)


Lesenswert?

Laufschrift:
Mit den "On-Board-Mitteln" der Displays nicht möglich, so wie du
bereits erkannt hast verschiebt shift eben das ganze Display.
Für deine Funktion mußt du halt das Display dauernd neu beschreiben.
Interrupt:
Deine Programme laufen derzeit kontinuierlich durch. Je nach Anzahl der
Verzweigungen usw. braucht jeder Durchlauf unterschiedlich lang. Einen
Timerinterrupt könntest du jetzt zum Beispiel für eine exakte Zeitbasis
verwenden. Du stellt einen Timer auf z.B. 10ms Laufzeit und damit wird
alle 10ms ein Interrupt ausgelöst. Bei diesem wird dein "normales"
Program unterbrochen, die Interrupt-Routine ausgeführt (in diesem Fall
würdest du die Uhrzeit raufzählen) und danach gehts mit dem normalen
Program weiter. Eine weitere Anwendung sind Tastendrücke oder Daten
über die serielle. Dein Hauptporgram braucht nicht dauernd nachschauen
ob was anliegt (sog. pollen) sondern wird einfach durch den Int.
unterbrochen.
.list und .nolist geben an ob der dazwischen liegende text im *.lst
File ausgegeben wird. Es macht keinen Sinn bei jedem Ausdruck die
gesamten equ mitzudrucken, meist reicht das Hauptprogramm. Die .orgs
bestimmen die Speicherstelle, also zumindestens das .org 0 mit den
nachfolgenden reset und Intvektoren sollte angegeben werden.

grüsse leo9

von Tobias A. (Gast)


Lesenswert?

Hi

ich hab das mit der Laufschrift mal schnell
geproggt ist nicht elegant, funzt aber.
(Codevision)
Ich hab ein 4x27 Zeichen Display
was ich aber hier als 2x40er benutze.
Kannst Dir den Code ja mal anschauen.
Gruß
  Tobi

zahl ist eine unsigend char variable


lcd_init(40);
while (1)
      {
      lcd_gotoxy(0,0);
      lcd_putsf("Hallo");
for (zahl=0; zahl<21; zahl++)
{lcd_gotoxy(zahl,1);
 lcd_putsf("Test");
 delay_ms(500);
 lcd_gotoxy(0,1);
 lcd_putsf("                          ");
 }
for (zahl=0; zahl<21; zahl++)
{lcd_gotoxy(21-zahl,1);
 lcd_putsf("Test");
 delay_ms(500);
 lcd_gotoxy(0,1);
 lcd_putsf("                          ");
 }

Hallo bleibt stehen und der Test läuft von
links nach rechts und von rechts nach links.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.