Forum: Mikrocontroller und Digitale Elektronik Bascom AVR Digitale ausgabe nicht vom ersten Portpin an


von Zi P. (zippo)


Lesenswert?

Hi,
ich versuche gerade eine Sieben-Segment-Anzeige zu programmieren und da 
krieg ich probleme. Denn die Ausgänge zu einem BCD zu 7-Segm. Baustein 
fangen nicht beim PortD.0 sondern bei PortD.4 an! Ich versuche es jetzt 
schon über 2h den AVR davon zu überzeugen die Ausgabe erst ab D.4 zu 
beginnen...der ist allerdings nicht einverstanden.
Ich habe schon einige Sachen getestet jedoch funktioniert da nichts von. 
Hat einer von euch eine Idee wie man das lösen kann?

Gruss
Zippo

von Justus S. (jussa)


Lesenswert?

da Code und Schaltung anscheinend geheim sind muss ich mal raten

in C wäre was in dieser Richtung ein Anfang...(BCD<<PD4)

von Zi P. (zippo)


Angehängte Dateien:

Lesenswert?

Na so was!!!
Der Code ist nicht geheim! Ich hatte ihn auch angehängt nur erscheint er 
nicht! Also kopier ich ihn mal ein

$regfile = "m8def.dat "
$crystal = 1000000
$baud = 2400
Ddrb = &B00111000
Portb = &B00111000
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Dim A As Long
Dim A1 As Long
Dim Ganzevolt1 As Long
Dim Ganzevolt As Long
Dim Kommavolt As Long
Dim X As Byte
Dim Y As Long
Dim Y1 As Long
'Dim Adcwert As Word
Config Adc = Single , Prescaler = Auto , Reference = Avcc

Const Adcwert = 1000

Do
'Adcwert = Getadc(0)
A1 = Adcwert * 200
A = A1 / 1023
Ganzevolt = A / 10
Ganzevolt1 = Ganzevolt * 10
Kommavolt = A - Ganzevolt1
Select Case Ganzevolt
Case Is < 10 : X = 0
Case Is >= 10 : X = 1
Case Is >= 20 : X = 2
End Select
Y1 = X * 10
Y = Ganzevolt - Y1

Print X ; Y ; "," ; Kommavolt

'X = Makebcd(x)
Portd = X
Portb.3 = 0
Waitms 10
Portb.3 = 1
'Y = Makebcd(y)
Portd = Y
Portb.4 = 0
Waitms 10
Portb.4 = 1
'Kommavolt = Makebcd(kommavolt)
Portd = Kommavolt
Portb.5 = 0
Waitms 10
Portb.5 = 1


Loop

von Justus S. (jussa)


Lesenswert?

wie ich schon geschrieben hab: die BCD-Zahl einfach mal 4 Stellen nach 
links shiften...

von Hannes Lux (Gast)


Lesenswert?

> wie ich schon geschrieben hab: die BCD-Zahl einfach mal 4 Stellen nach
> links shiften...

Das ist da erstmal richtig.

Trotzdem frage ich mich immer wieder, warum man ein Problem so 
umständlich löst. An BASCOM kann es doch nicht liegen, denn auch mit 
BASCOM kann man halbwegs effizient programmieren. Hier ein Beispiel 
(mein erstes und vermutlich einziges BASCOM-Programm):
http://www.hanneslux.de/avr/divers/pm24/VM_tn24_1.bas
Es ist Teil dieser Spilerei mit dem Tiny24:
http://www.hanneslux.de/avr/divers/pm24/index.html

...

von Justus S. (jussa)


Lesenswert?

Hannes Lux wrote:
>> wie ich schon geschrieben hab: die BCD-Zahl einfach mal 4 Stellen nach
>> links shiften...
>
> Das ist da erstmal richtig.
>
> Trotzdem frage ich mich immer wieder, warum man ein Problem so
> umständlich löst. An BASCOM kann es doch nicht liegen, denn auch mit
> BASCOM kann man halbwegs effizient programmieren.

beziehst du dich auf das ganze gepostete Programm oder auf das 
Shiften..weil was kürzeres wüsste ich in diesem Fall atm nicht...

von Hannes Lux (Gast)


Lesenswert?

> beziehst du dich auf das ganze gepostete Programm oder auf das
> Shiften..weil was kürzeres wüsste ich in diesem Fall atm nicht...

Ich beziehe mich auf das ganze Programm.
Das Shiften ist in Ordnung, wenn man das Programm als gegeben 
voraussetzt.

Allerdings ist für diesen Zweck der SWAP-Befehl (ASM) bedeutend 
effektiver. Ich weiß allerdings nicht, wie ich BASCOM dazu überreden 
sollte SWAP zu verwenden, besonders, da BASCOM zwingend alle Variablen 
im SRAM hält, SWAP aber auf Register wirkt. So tief bin ich in BASCOM 
nicht eingestiegen, ich habe es auch nicht vor, tiefer einzusteigen.

Ich programmiere meine AVRs in ASM. Dieses BASCOM-Programm ist nur 
entstanden, weil ein guter Freund auch etwas umständlich (vom 
Algorithmus her) programmiert hatte und ich ihm zeigen wollte, dass das 
Programm mit anderen Algorithmen nur die Hälfte des Tiny24 belegt, 
während Seines nicht mehr in den Tiny24 hineinpasste und einen Tiny44 
brauchte. Die ASM-Version belegt aber weniger als 25% des Tiny24-Flash 
(genauen Wert vergessen) bei höherem Funktionsumfang.

...

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.