Forum: Mikrocontroller und Digitale Elektronik Bascom Port Nibble Nixie


von Jonny R. (jonnyr)


Lesenswert?

Hallo,

Ich suche nach einer Möglichkeit mit Bascom einen "halben" Port zu 
beschreiben und auszugeben. Hintergrund:
ATMEGA32 alle Ports voll belegt
Port A.4-7 = Nixie BCD Min1
Port A.0-3 = Nixie BCD Min10
Port B.0-3 = Nixie BCD Std1
Port B.4-7 = ISP und ein Piezo und zwei Taster
Port C.0-3 = Nixie BCD Std10
Port C.4-7 = Led und DCF
Port D.0-3 = LCD Daten
Port D.4-7 = LCD Command und weitere Taster

Mit der Methode die ich jetzt benutze, überschreibe ich mir immer die 
vorhandenen Daten im jeweils verbleibenden Nibble:
Dim Wert4 As String * 1
Dim Bcd_byte As Byte
Bcd_byte = Wert4
Portc = Bcd_byte

Hiermit überschreibe ich immer den Zustand der LCD, die auch noch am 
Port C hängt, usw.

Vielleicht hilft ja eine eingebettet ASM Lösung?

Jonny

von Uwe N. (ulegan)


Lesenswert?

Lese das Port-Register erst aus, lösche die zu ändernden Bits mit einer 
Und-Verknüpfung und setze die neuen Bits mit Oder oder einer Addition. 
Und dann das Ganze wieder in den Port schreiben.

Uwe

von Jonny R. (jonnyr)


Lesenswert?

Hallo,

vielen Dank für dien Tip. Auf diesem Wege war ich auch schon, aber ohne 
Erfolg. Leider klappt es aber immer noch nicht so, wie es sollte. Die 
LED die an PORTC.4 hängt, ist in diese Konstallation tot.

Der momentane Code sieht nun so aus:
   'Temp ist als byte definiert, wert4 ebenfalls
   ' Nixie hängen an Portc.0-3, led an Portc.4
   Temp = Portc
   Temp = Temp And $f0
   Temp = Temp Or Wert4
   Portc = Temp

Was ist bei mir der Denkfehler?

Jonny

von Rolf I. (for_ro)


Lesenswert?

Du bist sicher, dass Wert4 kein String mehr ist, so wie oben angegeben?
Wo und wie wird denn Wert4 gesetzt?

Gruß

Rolf

von eProfi (Gast)


Lesenswert?

Temp = Portc

sollte das nicht

   Temp = Pinc

heißen?

Unterschied PORTC und PINC

Ansonsten: eine Schattenvariable für das Port verwenden und nur 
ausgeben, nie einlesen.

von Marius S. (lupin) Benutzerseite


Lesenswert?

Was mir als erstes auffällt ist, dass du einen Mikrocontroller in deiner 
Uhr hast und trotzdem BCD-Dekoder benutzt - warum?

Deine Lösung scheint okay zu sein (ich programmiere kein BASS-COM), aber 
statt...

Temp = Temp Or Wert4

...könntest du es mal hiermit versuchen:

Temp = Temp Or (Wert4 - 48)

Ich gehe nämlich stark davon aus, dass Wert4 ein ASCII string/zeichen 
ist.

Viel spass beim Nixie basteln!

von Rolf I. (for_ro)


Lesenswert?

eProfi wrote:
> Temp = Portc
>
> sollte das nicht
>
>    Temp = Pinc
>
> heißen?
>
> Unterschied PORTC und PINC
>
> Ansonsten: eine Schattenvariable für das Port verwenden und nur
> ausgeben, nie einlesen.

Das ist doch ok, PortC ist ja ein Ausgang und er möchte wissen, wie der 
gesetzt ist. Also liest er den aktuellen Zustand in die Variable Temp, 
modifiziert Temp und setzt PortC wieder auf Temp.

Temp = Temp And $f0 funktioniert, ich finde aber davon keine Definition.
Temp = Temp And &HF0 ist die richtige Schreibweise dafür.

Gruß

Rolf

von Jonny R. (jonnyr)


Angehängte Dateien:

Lesenswert?

Hallo,

Nun funktioniert die Ausgabe Routine, aber nur mit Trick 17. Warum ich 
den Wert Min1 mir 3 subtrahieren muß, (denn nur so läuft es) ist mir 
völlig unklar.....

Siehe Anlage

Jonny

von Martin (Gast)


Lesenswert?

Gibt es in Bascom auch einen Debugger?

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.