Forum: Compiler & IDEs myAVR - Portbelegung & avr-gcc - Verhalten


von omgwtfbbq (Gast)


Lesenswert?

Aufgrund des 4-Bit-Modus eines LCD an einem myAVR-Board bin ich 
scheinbar gezwungen, nur 6 Bit eines Ports tatsächlich zu benutzen. Die 
"technische Beschreibung" von myAVR ist nicht wirklich von Nutzen, 
ebenso wie der vor Fehler strotzende ASM-Code. Ich hätte nun2 Fragen:

1) Vor mir liegt das Datenblatt des Samsung KS0070B µC - Ist das auch 
der, der auf den LCD-Modulen verbaut wird?

2) mein Versuch:
1
struct port
2
{
3
  unsigned data : 4;
4
  unsigned rs : 1;
5
  unsigned e : 1;
6
  unsigned complete : 6;
7
} port;
8
9
port.complete = 0xC;
10
11
PORTD |= port.complete;
--> Welche Bits von PORTD werden nun überschrieben? (das Feld hat ja nur 
6 Bits)

von Chris (Gast)


Lesenswert?

> PORTD |= port.complete;
>
> --> Welche Bits von PORTD werden nun überschrieben?
> (das Feld hat ja nur 6 Bits)

Dass das Feld nur 6 Bits hat, ist in der Zeile unwichtig, weil die 
rechte Seite sowieso in den Typ von PORTD konvertiert wird, etwas 
uint8_t-mäßiges.
Die Zeile entspricht also PORTD |= 0xC.

von holger (Gast)


Lesenswert?

>2) mein Versuch:
>struct port

Was soll der Schrott mit dem struct?
Das macht eventuell Sinn wenn du zwei
oder mehr Displays anschliessen möchtest.
Für ein Display ist das Murks.

von omgwtfbbq (Gast)


Lesenswert?

kann bitte mal jemand antworten, der auch was zum Thema zu sagen hat, 
vozugsweise keine Forentrolle und Klugscheisser?
Ich hab wirklich keine Lust, jetzt mit dem Multimeter das Ergebnis zu 
messen o.0. Die Erste Frage ist auch relativ wichtig ...

von omgwtfbbq (Gast)


Lesenswert?

[trollfeed][pleasignore]Wenn du jemals einen Blick auf die Umsetzung der 
gegebenen Konstanten und Makros im avr-gcc-Paket geworfen hättest 
wüsstest du auch dass ein sehr grosser Teil exakt so realisiert wird, 
tatsächlich ist ein LCD in C ohne solche Hilfen nur sehr schwer zu 
steuern, schliesslich muss man in vielen Routinen dieselben Bits kippen 
oder auslesen, eine für Menschen lesbare Form wie 'n Bitfield kommt da 
sehr gelegen - zudem dürfte der gesamte Algorithmus extrem ineffizient 
werden wenn keine flüchtigen Speicher oder ähnliches benutzt werden, 
gell Bubbele ;-).[/pleasignore][/trollfeed]

Kann mir jemand helfen? Das wäre nett, danke.

von Michael U. (amiga)


Lesenswert?

Hallo,

vielleicht solltest Du Deine Erkenntnisse mal den Schreibern des 
AVR-GCC-Tutorials mitteilen, die scheinen das noch nicht zu wissen...
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#LCD-Ansteuerung

Gruß aus Berlin
Michael

von omgwtfbbq (Gast)


Lesenswert?

schön zu sehen, dass hier nur getrollt statt geholfen wird ...

von holger (Gast)


Lesenswert?

>schön zu sehen, dass hier nur getrollt statt geholfen wird ...

Dein struct hat 12 Bits.
Könnte man mit einem union evtl. verbessern.
Wird aber auch nichts bringen.
Und ich glaube das geht weit über deinen Horizont :(

von omgwtfbbq (Gast)


Lesenswert?

Wow! Das war ne Hilfe, danke!
Fehlen eigentlich nur noch Sätze wie "C ist eine Programmiersprache", 
"Computer arbeiten prinzipiell binär" und "der Himmel ist meisstens 
blau".

Du musst sehr einsam sein ... mein Beileid --> soviel Hass und 
Klugscheisserei implizieren das normalerweise. Ich habs übrigens 
mittlerweile selbst hingekriegt, das struct funktioniert super; 
seltsamerweise schiebt avr-gcc um die Anzahl der Bits der Differenz 
zwischen den Datentypen nach rechts.

Viel Spass noch beim troll0rn, nicht-lesen-koenn0rn und 1337-h4xx0rn 
oder wie ihr Kinder das heutzutage nennt.

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.