- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 173

Thema: Portbelegung auf ATMega für LCD1602

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    175
    Zitat Zitat von HeSt Beitrag anzeigen
    So, bin schon wieder da

    Nichts tragisches ...!

    @avr_racer,
    ich hab mir deine Zeitenrechnung genauer angesehen und bin zur Ansicht gekommen, dass sie nicht stimmt.
    Jetzt gibt es zwei Möglichkeiten:
    1. sie stimmt wirklich nicht oder
    2. meine Rechnung stimmt nicht!

    Dein Beispiel aus text3: (cc = cpu clock cycle = 1µs)
    wait25us:
    ldi r20,$20 ;1cc
    wait25us1:
    dec r20 ;1cc
    brne wait25us1 ;1/2cc
    ret

    Nehmen wir brne mit 1cc an (=1µs), dann ergibt das folgende Rechnung:
    $20 sind dezimal 32. Also 32 Durchgänge/Schleifen.
    32 mal 2 (dec + brne á 1µs) ergibt 64µs und keine 25.

    Wo liegt nun der Gedanken-Fehler?
    Bei mir oder bei dir?
    Bei 1Mhz
    ;Call = 3 Takte (3µs)
    wait25us:
    ldi r20,$20 ;1cc ; 1Takt (1µs)
    wait25us1:
    dec r20 ;1cc ; 1Takt (1µs)
    brne wait25us1 ;1/2cc ; 1Takt bei 0 und 2 Takte wenn !=0 also (1µs oder 2µs)
    ret ; 4Takte (4µs)

    3µs + 1µs + (32*3µs(!=0) - 1µs(bei 0)) + 4µs = 103µs bei 1Mhz

    Ich habs mir mal geschrieben und passe es auf die Frequenz an, ja es geht auch anders und manchmal verwirrend

    Zitat Zitat von HeSt Beitrag anzeigen
    @alle:
    Übrigens stehe ich schon länger auf der Leitung und komm nicht weiter.
    Ich will/muss einen ADC-Wert (8Bit ADLAR genügt) in Volt umrechnen (Akkuspannung 12V, max. 13,7 Ladeschlussspannung).
    Folgende ADC-Beschaltung: 15V-68k-ADC-50kPot-GND.
    Bei exakt 15V wird mit einem Spindelpoti der ADC-Maximalwert genau auf 5V eingestellt.
    Somit hab ich eine Reserve, sollte die Spannung mal über 13,7V ansteigen.
    Zudem dient eine 5V Z-Diode als Schutz.
    Bei 15V liegen nun 5V am ADC. Das ergibt einen ADC-Wert von 255 (ADCH).
    Das ist Basis für die weiteren Berechnungen.
    Nehmen wir nun als zu messende Spannung 10,4V an.
    Das ergibt folgende Schlussrechnung:
    15V.....255
    10,4V....?
    10,4*255/15=177 gerundet.
    Oder anders rum:
    255/15=17*10,4=177 gerundet (was ADC dann tatsächlich bingt? 176/177?)
    Jetzt drehen wir die Sache um:
    177/17=10,4 gerundet.
    Ja ADLAR lässt den ADC auf 8Bit schrumpfen somit ist deine Auflösung 5V (AREF) / 256bits = 0,0195..V also 19,5mV pro Bit
    Diesen Wert deklarierst du dir als z.B: 195 in der Init und MULTIPLIZIERST du dir dann mit den im ADCH zu Verfügung stehenden BITS z.B.: mit 256 = 49920.
    Dein Widerstandsteilerverhältnis ist 3:1 heißt 49920*3 = 149760 den Punkt richtig setzen und du hast deine 14.976V ohne geschönt zu haben.

    1. 10,4*255/15 sind verkehrt denn 8bit ADC hat 256 Stufen die 0 gehört mit dazu
    richtig also 10,4*256/15 =177,493bits. Abgeschnitten sinds dann nur 177 wie es auch korrekt ist. Aufgrund das dir jetzt aber im Wandler die Nachkommastellen fehlen wirds halt ungenauer.
    Nur mit der Multiplikation ist es einfacher

    177bits * 195(bits/V) = 34515(V) * Teiler 3 = 103545(V) jetzt nur den Punkt im LCD richtig setzen und du hast deine 10.3545V auf dem LCD, ohne DIVISION.
    Nur über FESTKOMMAARETHMETIK

    Zitat Zitat von HeSt Beitrag anzeigen
    Nun hab ich nachstehende Divisions-Routine im Netz gefunden.
    Allerdings rechnet die (auch) nicht richtig.
    Da steht im Rest (=Nachkommastelle) nach obiger Rechnung, statt 4 eine 8!
    Wo liegt hier der Fehler, bzw. wie/wo kann man das berichtigen?
    Ich möchte bei den Zehntel-Volt schon relativ genau sein.

    Sonst schaut bisher alles gut aus ...

    Code:
    ; 8Bit Division mit Rest; Laufzeitverhalten im schlechtesten Fall (255/1) 103 Taktzyklen
    ; Achtung:
    ; Divison durch 0 wird nicht abgefangen und führt zu einer Endlosschleife
    ; Dieser Algorithmus funktioniert nur für vorzeichenlose 8Bit-Werte
    ; Nach Division steht das Ergebnis in r18 und der Rest in r16
    
    .def divident =    r16
    .def divisor =    r17
    .def ergebnis =    r18
    .def zw =    r19
        ldi    divident,177        ; Berechnet 177/17 !
        ldi    divisor,17      
    division:
        clr    ergebnis        ; Ergebnis initialisieren
        ldi    zw,1            ; Teilbarkeit durch 1 annehmen
        tst    divisor
    loop:
        brmi    div_loop        ; Den Divisor linksbündig ? -> JA
        lsl    zw            ; Zwischenergebnis und
        lsl    divisor            ; Divisor einen Schritt nach links
        rjmp    loop            ; ... und nochmal prüfen
    div_loop:
        cp    divident,divisor    ; divident >= divisor
        brlo    division_weiter        ; -> nein
        add    ergebnis,zw        ; Ergebnis vergrößern und
        sub    divident,divisor    ; Dividenten verkleinern
    division_weiter:
        lsr    divisor            ; Divisor und Zwischenergebnis
        lsr    zw            ; einen Schritt nach rechts
        brne    div_loop        ; zw!=0 ? ->JA
        nop                ; Ergebnis in ergebnis
                        ; Rest in divident !
    end:     rjmp    end
    Wo hast denn die Routine her ? Ähm der Rest steht nicht zufällig im DIVIDENT R16 drin mit 7 ??

    177/17 = 10, ;10*17 = 170
    177 -170 = R 7 ;7/ 17 schwer also 7*10 = 70
    70/17 = 4 also 10,4 ;4*17 = 68 somit
    70-68 = R 2 ;2/17 schwer also 2*10 = 20
    20/17 = 1 also 10,41 ; 1*17 = 17
    20-17 = R 3 ; 3/17 schwer also 3*10 = 30
    30/17 = 1 also 10,411 usw...

    Zitat Zitat von HeSt Beitrag anzeigen
    Im AVR-Studio funktionieren aber sehr wohl auch T0 und T1 OVF.
    Kann ich davon ausgehen, dass das auch in der Realität so ist?
    NEIN das Datenblatt weiß mehr als der Simulator ausser es ist unter der Hilfe angegeben. Grundsätzlich aber das Datenblatt ausschlaggebend.

    Man kann aber den Timer laufen lassen oder den Prescaler vor den SLEEP-Befehl zu setzen ist nun nicht wirklich kein Problem oder ?
    Geändert von avr_racer (11.01.2019 um 15:07 Uhr)

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    Danke für die Antworten!
    Zitat Zitat von Moppi Beitrag anzeigen
    Es kommt drauf an, welchen Sleep Mode Du möchtest, ...
    In diesem Fall ist nur Timer2 angegeben, egal welcher Modus.
    Zitat Zitat von Moppi Beitrag anzeigen
    Beim ATmega328P steht auch nur Timer2. Ich verwende aber Timer1, der dann bei Überlauf einen Interrupt auslöst und auch zum Aufwachen führt.
    Allerdings muss ich darauf achten, dass im jeweiligen Sleep-Mode dann der Timer1 auch aktiv ist.
    Das gibt mir Hoffnung. Im Datenblatt des ATmega328P ist auch nur Timer2 angegeben.
    Zitat Zitat von avr_racer Beitrag anzeigen
    25µs versus 103µs bei 1Mhz
    Mir gings nur darum, ob mein Gedankengang richtig ist.
    Ob da noch vorne und hinten ein paar µs dazu kommen, darum gings nicht.
    Aber danke für die exakte Erklärung!
    Zitat Zitat von avr_racer Beitrag anzeigen
    Ja ADLAR lässt den ADC auf 8Bit schrumpfen somit ist deine Auflösung 5V (AREF) / 256bits = 0,0195..V also 19,5mV pro Bit
    2 Hundertstel Volt an Genauigkeit genügen mir. Wenn die Zehntel stimmen passt es schon.
    Zitat Zitat von avr_racer Beitrag anzeigen
    Diesen Wert deklarierst du dir als z.B: 195 in der Init und MULTIPLIZIERST du dir dann mit den im ADCH zu Verfügung stehenden BITS z.B.: mit 256 = 49920.
    Dein Widerstandsteilerverhältnis ist 3:1 heißt 49920*3 = 149760 den Punkt richtig setzen und du hast deine 14.976V ohne geschönt zu haben.
    Die Multiplikationen hatte ich ja auch schon im Kopf.
    NUR: ein 16Bit Register (word) fasst nur bis 65535.
    Laut Datenblatt wird das Ergebnis einer Multipikation in R1-R0 geschrieben = 16Bit.
    Wie aber funktioniert diese Multiplikation: 49920*3 = 149760?
    Wo soll 149760 gespeichert werden?
    Oder hier:
    177bits * 195(bits/V) = 34515(V) * Teiler 3 = 103545(V)
    Da fehlt mir noch einiges an Wissen ...
    Zitat Zitat von avr_racer Beitrag anzeigen
    Wo hast denn die Routine her ?
    Irgendwo aus dem Netz. Woher weiß ich nicht mehr.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Der Timer2 ist glaub ich ein besonderer. Zumindest beim ATmega328P kann man den auch unabhängig takten, selbst, wenn sonst alles schläft und auch der übliche Taktgenerator abgeschaltet ist.
    Das man auch Timer1 verwenden kann oder einen andern, liegt beim 328P daran, dass der auch durch so ziemlich jeden Interrupt geweckt werden kann. So löst auch der Timer1 bei Überlauf einen Interrupt aus und weckt also den µC. Auch wenn der Timer1 jetzt namentlich nicht direkt in der Tabelle steht. Auch Signalwechsel an den I/O-Ports können einen Interrupt auslösen und so zum Wecken führen. So könnte man auch eine Real Time Clock extern anschließen.


    MfG

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    Ja, T2 ist ein async Timer, die anderen nicht.
    Und PCInts hab ich beim Mega16 auch schon vermisst. Offenbar gibts die wirklich nicht
    Beim Mega328 allerdings schon.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    175
    Zitat Zitat von HeSt Beitrag anzeigen
    Die Multiplikationen hatte ich ja auch schon im Kopf.
    NUR: ein 16Bit Register (word) fasst nur bis 65535.
    Laut Datenblatt wird das Ergebnis einer Multipikation in R1-R0 geschrieben = 16Bit.
    Wie aber funktioniert diese Multiplikation: 49920*3 = 149760?
    Wo soll 149760 gespeichert werden?
    Oder hier:
    177bits * 195(bits/V) = 34515(V) * Teiler 3 = 103545(V)
    Da fehlt mir noch einiges an Wissen ...
    Na so als wenn du eine schriftliche Multiplikation machst. Heißt z.B: bei 49920*3 = 40000*3 + 9000*3 + 900*3 + 20*3 + 0*3 = 120000 + 27000 + 2700 + 60 + 0 = 149760 .
    Im Link siehst du das ich erst 1low*2low + 1low*2high + 1high*2low + 1high*2high rechne
    https://www.roboternetz.de/community...ine-Bibliothek unter Mathe.asm
    http://www.avr-asm-tutorial.net/avr_...nen/index.html

    Das Wissen fehlt dir nicht sondern es ist nur verschüttet im Unterbewusstsein, man hats ja mal in der 2-4Klasse gelernt

    Wo es gespeichert wird hängt von der Rechenart ab, Bei der Multiplikation fest verankert IMMER in R0:R1 heißt wenn dort die Werte vorher geladen werden, werden sie danach überschrieben.
    Addition/Subtraktion Add r16,r17 wird das Ergebnis immer in das Register vor dem Komma geschrieben siehe Datenblatt Instructionset

    Einfach mal im Simulator Werte laden und mit den Rechnarten probieren zum Verständnis.

    Zum Timer 2 der kann ASYNCHRON bzw für SLEEP muss sogar ASYNCHRON betrieben werden.

    Der MEGA16/32 sind die älteren Generationen Atmega 48/88/168/328 sind alles Atmega8 nur mit 4-32Kbyte Flash und kleinen Unterschiedlichkeiten in der Adressierung der Hawrdwere aber sonst identisch

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    Mein lieber Schwan!!
    Das soll einer behirnen!?
    Bei deinem "Mathe.asm" Beispiel steige ich komplett aus!!
    Tut mir leid. Das pack ich einfach nicht. Das ist mir viel zu verwirrend.
    Dafür gehts bei der Routine "Hardware Multiplikation von 16- mit 8-Bit-Zahl" aus dem Tutorial.
    Danke!

    Zitat Zitat von avr_racer Beitrag anzeigen
    177bits * 195(bits/V) = 34515(V) * Teiler 3 = 103545(V) jetzt nur den Punkt im LCD richtig setzen und du hast deine 10.3545V auf dem LCD
    Das stimmt so nicht!
    103545 ist eine "Zahl"! Die kann ich am Display nicht anzeigen.
    Einen 8-Bit Registerinhalt in Text umzuwandeln geht ja. Dazu hab ich eine Routine im Netz gefunden.
    Aber wie geht das mit 3 Registern zu je 8-Bit?
    Da kann ich nicht einfach jedes einzelne Register in Text umwandeln.
    Für eine Zahl aus 3 Registern in ASCII bin ich im Netz leider nicht fündig geworden.
    Ich kapier das alles leider (noch) nicht.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    (fang mal irgendwann ganz sachte mit C++ an)
    Geändert von Moppi (12.01.2019 um 21:44 Uhr)

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    175
    Zitat Zitat von HeSt Beitrag anzeigen
    Mein lieber Schwan!!
    Das soll einer behirnen!?
    Bei deinem "Mathe.asm" Beispiel steige ich komplett aus!!
    Tut mir leid. Das pack ich einfach nicht. Das ist mir viel zu verwirrend.
    Dafür gehts bei der Routine "Hardware Multiplikation von 16- mit 8-Bit-Zahl" aus dem Tutorial.
    Danke!
    Ausgangsbasis sind immer 2*16bit Zahlen die jeweils aus 2*8bit Registern zu 1*16bit zusammen gefasst sind. Die Ergebnissregister sind 4*8bit somit ist der Zahlenbereich 0-4294967296 Zahlen möglich womit deine 103545 locker reinpasst.
    Das Ergebnis steht auch relativ sichtbar
    Was ist dennn angeblich so verwirrend ?

    Nur weil das Carry also der Übertrag bei der Addition mit hinzukommt ? Wenn du selber schriftlich multiplizierst rechnest du doch genauso:

    .....1234 * 5
    .........20
    .......150
    ......1000
    ......5000
    .= ..6170

    Rein in binär kann man das auch rechnen nur das wird absolut zuviel.
    Das Problem bei dieser Routine ist das du die Restbildung zum Erweitern sich deutlich verkompliziert.
    Denn hier bist du schon in der Floatingpointoperation heißt mit Kommastellen rechnen...

    Zitat Zitat von HeSt Beitrag anzeigen
    Das stimmt so nicht!
    103545 ist eine "Zahl"! Die kann ich am Display nicht anzeigen.
    Einen 8-Bit Registerinhalt in Text umzuwandeln geht ja. Dazu hab ich eine Routine im Netz gefunden.
    Aber wie geht das mit 3 Registern zu je 8-Bit?
    Da kann ich nicht einfach jedes einzelne Register in Text umwandeln.
    Für eine Zahl aus 3 Registern in ASCII bin ich im Netz leider nicht fündig geworden.
    Ich kapier das alles leider (noch) nicht.
    Warum kannst du diese Zahl im Display nicht dastellen ? Du wandelst die 8bit in Text ? Eher nicht du meinst du wandelst es von 8Bit in DEZIMAL.
    Die Routine ist nichtsweiter als ein Vergleich z.B.:
    von 2300
    >=1000 ? ja 2300 minus 1000 = 1 Durchgang Rest 1300
    >=1000 ? ja 1300 minus 1000 = 1 Durchgang Rest 300
    Durchgänge incrementieren oder Subtrahieren Wert als 2 speichern = tausender Stelle
    >= 100 ? ja 300-100 = 1 Durchgang Rest 200
    >= 100 ? ja 200-100 = 1 Durchgnag Rest 100
    >= 100 ? ja 100-100 = 1 Durchgang Rest 0
    Speichern als hunderter Stelle 3
    >= 10 ? nein also 0 speichern als Zehner Stelle
    >= 1 ? nein also 0 speichern als einer Stelle

    Jetzt zu deiner Frage wie macht man das für x-8Bit-Register?
    1byte 8 bit = 255 = Zahlenbereich also 100 ist dein Grundwert mit dem man beginnt abzuziehen
    2byte 16 bit = 65535 = Zahlenbereich also 10000 ist dein Grundwert mit dem man beginnt abzuziehen
    3byte 24 bit = 16777215 = Zahlenbereich also 10Mio ist dein Grundwert mit dem man beginnnt abzuziehen
    usw

    Hinweis Wertebereich 8bit = 256 Zustände. Der Zahlenbereich ist immer Wertebereich minus 1 deshalb 255 Trotzdem bleiben es 256 Zahlen 0-255

    SO und auch dafür gibs eine Lösung im selbigen Link und nennt sich HEX_DEZ_Wandlung auch in der MATHE.ASM zu finden nur mit dem Unterschied das es eben für 4*8Bit ausgelegt ist der Zahlenbereich 0-4294967296.
    Wenn du nach der Wandlung dir die Werte ins SRAM speicherst, stehen diese gleich als DEZIMAL zu Verfügung und man kann sich das Ergebniss sofort anschauen. DEBUG-Option im Simulator

    Wie stark nutzt du den Simulator ? Also spielst du jede Änderung durch ?

    Nachtrag: Sich mit diesen Grundlagen zu beschäftigen ist im ersten Moment schwer nur ohne gehts einfach nicht. Rate mal warum viele soviele Probleme in Hochsprachen haben obwohl diese es eigentlich einfacher machen sollten...
    Zitat Zitat von Moppi Beitrag anzeigen
    (fang mal irgendwann ganz sachte mit C++ an)
    Klar 2 Jahre erstmal den Syntax lernen ohne das man irgendwas am Controller als Ergebnis sieht.... Auch die Wandlungen macht C+/C++/C# und alle anderen Hochsprachen ebenso nur mit anderen Ausdrücken...
    Geändert von avr_racer (13.01.2019 um 10:43 Uhr)

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    Zitat Zitat von avr_racer Beitrag anzeigen
    Was ist dennn angeblich so verwirrend ?
    Nur weil das Carry also der Übertrag bei der Addition mit hinzukommt ?
    Nein, das ist es nicht.
    Wenn man, so wie du, mit der Materie auf du + du ist, ist das leicht(er) zu verstehen.
    Das fehlt bei mir leider noch fast völlig. Ich hab solche Rechnereien bislang nicht benötigt und mich somit auch nicht damit befasst.
    Deshalb brauche ich jetzt Zeit zum behirnen. Bitte um Geduld.
    Zitat Zitat von avr_racer Beitrag anzeigen
    SO und auch dafür gibs eine Lösung im selbigen Link und nennt sich HEX_DEZ_Wandlung auch in der MATHE.ASM zu finden nur mit dem Unterschied das es eben für 4*8Bit ausgelegt ist der Zahlenbereich 0-4294967296.
    Wenn du nach der Wandlung dir die Werte ins SRAM speicherst, stehen diese gleich als DEZIMAL zu Verfügung und man kann sich das Ergebniss sofort anschauen. DEBUG-Option im Simulator
    Das, was davor noch an Erklärung steht, muss ich erst ganz genau durcharbeiten ...
    HEX_DEZ_Wandlung hilft mir nichts! Oder reden wir da aneinander vorbei?
    Wenn ich zB einen Wert von 174 in einem 8-Bit Register habe, ist für mich dieser Wert DEZIMAL. Das kann ich aber nicht am Display anzeigen.
    Ich muss die einzelnen Ziffern erst einzeln in ASCII/Text (1=$31,7=$37,4=$34) in einzelne Register umwandeln damit sie anzeigbar sind. Oder was meinst du mit dezimal anzeigen?
    Zitat Zitat von avr_racer Beitrag anzeigen
    Wie stark nutzt du den Simulator ? Also spielst du jede Änderung durch ?
    Das kommt auf den Code/die Änderung an. Wenn ich den Code "verstehe" und somit weiß wie er funktioniert, was er tut, meist nicht.
    Bei diesen Rechnereien JEDE!
    Zitat Zitat von avr_racer Beitrag anzeigen
    Nachtrag: Sich mit diesen Grundlagen zu beschäftigen ist im ersten Moment schwer nur ohne gehts einfach nicht. Rate mal warum viele soviele Probleme in Hochsprachen haben obwohl diese es eigentlich einfacher machen sollten...
    Deshalb ist mir, auch wenn es aufwändiger ist, Assembler lieber, weil ich weiß (oder hoffe zu wissen) was der Prozessor wie macht.
    Ich hab wahrscheinlich noch einen Knopf im Hirn, den es erst gilt zu lösen.
    Dann wirds mir leichter fallen diese Rechnereien zu verstehen und dann auch zu codieren. Ich lerne bei jedem Projekt wieder was dazu.
    Bei diesem ist es halt im Moment heftig, weil mir ein gewisses Grundverständnis (und damit meine ich nicht der Codierung) fehlt.
    Ich werd's schon noch hinkriegen ...

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Zitat Zitat von HeSt Beitrag anzeigen
    HEX_DEZ_Wandlung hilft mir nichts! Oder reden wir da aneinander vorbei?
    Wenn ich zB einen Wert von 174 in einem 8-Bit Register habe, ist für mich dieser Wert DEZIMAL. Das kann ich aber nicht am Display anzeigen.
    Ich muss die einzelnen Ziffern erst einzeln in ASCII/Text (1=$31,7=$37,4=$34) in einzelne Register umwandeln damit sie anzeigbar sind. Oder was meinst du mit dezimal anzeigen?
    Dezimal sind Werte auf Basis von 10.
    Hexadezimal Werte auf Basis von 16.
    Binär oder Dual Werte auf Basis von 2.

    In einem Bit kann nur Dual gespeichert werden.
    In einem Byte, das aus 8 Bit besteht, wird Hexadezimal gespeichert. Hier sind Werte von 0 bis einschließlich 15 möglich.

    Umgewandelt werden muss deshalb von Hexadezimal nach Dezimal , zur Ausgabe in einzelne Stellen (der darzustellenden Dezimalzahl) zerlegt und als ASCII-Wert abgebildet.

    dezimal (Basis 10): 123
    hexadezimal (Basis 16): 7B
    binär (Basis 2) 8 Bit: 01111011


    MfG

    - - - Aktualisiert - - -

    Zitat Zitat von avr_racer Beitrag anzeigen
    Klar 2 Jahre erstmal den Syntax lernen ohne das man irgendwas am Controller als Ergebnis sieht....
    Na, na! Wenn man das erlernt, sieht man schon was...

    In der Tat sind die ersten Schritte schwer. Überall. Auch bei Assembler bzw. Maschinensprache braucht man Geduld. Nicht so schnell, immer eins nach dem andern. Ich glaube HeSt wird gerade etwas überrumpelt.

    MfG

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. [ERLEDIGT] Atmega 644 & atmega8 parallel am ISP ... Reset beider atmega notwendig ..
    Von Ritchie im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 29.03.2013, 11:18
  2. CCPRO M128: Portbelegung
    Von Dirk im Forum Robby RP6
    Antworten: 0
    Letzter Beitrag: 22.05.2009, 22:26
  3. Portbelegung bei diesem Display [erledigt]
    Von Rob.Anfänger im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 18.11.2006, 18:12
  4. Portbelegung ATmega32
    Von Rob.Anfänger im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 15.11.2006, 19:59
  5. Antworten: 4
    Letzter Beitrag: 12.11.2006, 16:40

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test