Atmega8515 programmieren?

Ahhh Klar, 255, daher die 55 auf dem Display.

Die Pause habe ich nun vor den Rücksprung zur Abfrage gemacht, funktioniert schon besser ....

Aber trotzdem kommst du jetzt nicht um ein Beispiel drum rum :p
 
... Aber trotzdem kommst du jetzt nicht um ein Beispiel drum rum :p
:D Ich versuche da heute Abend mal etwas zu schreiben. Mit Timern und Interrupts hast du ja noch nichts programmiert?! Ich werde da nämlich eine kleine Interruptroutine schreiben, die dir ein paar Flags für das "Hauptprogramm" bereitstellt, die in unterschiedlichen Zeitabständen gesetzt werden. Die Pausen benötigst du dann nicht mehr, die "verbraten" eh nur Rechenzeit. Wie du mit den "TimerFlags" dann schön arbeiten kannst, erkläre ich dir dann noch.
 
Hallo Michael,

es hat jetzt doch etwas länger gedauert :rolleyes: Ich habe da mal etwas Code für dein Projekt geschrieben. Es wäre gut, wenn du mir mal den letzten Stand deiner Software mailen könntest, dann kann ich deine und meine Software richtig kombinieren.

Bis dann,
Dirk
 
Hallo Dirk,

Ich habe nun noch eine DigitalPoti gefunden, hat 3 Pins, wobei der mittlere Anschluss auf Masse liegt. Weitere Daten habe ich leider nicht darüber. Aber vielleicht kann man da ja auch was feines mit machen ?
Was wie und wo ich anschließen muss, solltest du mir dazu vielleicht auch noch mal in "hochdeutsch" erklären :eek:

LCD-Display wäre sicher auch eine nette Sache, macht aber sicherlich ne Menge arbeit, und da scheu ich mich noch vor *grins
Also LCD kommt sicherlich auch irgendwann mal, aber jetzt noch nicht.

Mit der Bedienung von AVR-Studio komm ich auch noch nicht ganz klar (Fachchinesisch ähhh -Englisch ist nicht ganz meine Stärke).... irgendwie kann man sein Programm da doch checken, also zB die Port-Zustände anzeigen lassen usw, und auch Befehl für Befehl ausführen ?! Ich machte es bisher so, dass ich das Programm auf den AVR schrieb, und in der Schaltung testete, ist aber sehr umständlich ....
 
Hallo Michael.

Ich habe nun noch eine DigitalPoti gefunden, hat 3 Pins, wobei der mittlere Anschluss auf Masse liegt. Was wie und wo ich anschließen muss, solltest du mir dazu vielleicht auch noch mal in "hochdeutsch" erklären
Da das Digitalpoti 3 Pins hat, ist es ein mechanisches Digitalpoti. Der mittlere Pin ist GND, die anderen beiden sind die Quadratursignale. Im hochohmigen Zustand gehen die Signalpegel nach VCC, wenn man die entsprechenden Portpins des AVR auf Input/PullUp schaltet.

Schließ das Digitalpoti (Incrementalencoder) folgendermaßen an den ATmega8515 an:
Achtung: Die Portpins dürfen nicht als Output geschaltet und auf high gesetzt werden!

Pin 1 -> PD2 (INT0) Pin 12
Pin 2 -> GND
Pin 3 -> PD1 Pin 11


Bevor du das Digitalpoti anschließt, kann ich die ja erst mal den code schreiben, der das Digitalpoti "abfragt".

Mit der Bedienung von AVR-Studio komm ich auch noch nicht ganz klar (Fachchinesisch ähhh -Englisch ist nicht ganz meine Stärke).... irgendwie kann man sein Programm da doch checken, also zB die Port-Zustände anzeigen lassen usw, und auch Befehl für Befehl ausführen ?! Ich machte es bisher so, dass ich das Programm auf den AVR schrieb, und in der Schaltung testete, ist aber sehr umständlich ....
Man kann das Programm mit dem Debugger überprüfen, indem man an bestimmten interessanten Stellen des Programms Breakpoints setzt. Der Debugger hält an den Breakpoints an und man kann sich so den I/O-Bereich, den Inhalt der Register r0 bis r31 und den Inhalt des SRAMs als Memorydump ansehen.
Um debuggen zu können, muss man zuvor dem Debugger "sagen", welche Platform und welches Device man verwendet, also bei dir AVR Simulator und ATmega8515. Den Debugger startet man mit Start Debugging. Mit Reset springt man zur Resetadresse. Mit Run läuft das Programm ab und stoppt beim nächsten Breakpoint. Mit Break kann man das Programm anhalten. Mit Step Into geht man in eine Routine hinein, mit Step Over führt man eine komplette Routine aus, mit Step Out kann man, wenn man sich in einer Routine befindet, diese komplett ausführen und der Debugger hält nach Return-Instruction an. Mit Toggle Breakepoints kann man Breakepoints an- und abschalten.


Grüße
Dirk
 
Gib es einen bestimmten Grund für die Pins 1 und 2? Oder würdest du nur die Software auf Pin1 und 2 abstimmen wollen?

Das die Pins auf IN geschaltet werden, leuchtet ein, ich habe ja den gesamten Port auf IN.
Aber die Pins müssen doch high, weil sie mit dem Schalter auf low gezogen werden?
(Oder interpretiere ich deinen Satz nur falsch?)

AVR-Studio wird mir nun auch übersichtlicher, mal sehen was ich sonst noch alles damit machen kann :)))


Also ich wär soweit... *quengel* :D
 
Hallo Michael.

Gib es einen bestimmten Grund für die Pins 1 und 2? Oder würdest du nur die Software auf Pin1 und 2 abstimmen wollen?
Du meinst PD1 und PD2. Ja, PD2 ist alternativ der INT0 Interrupteingang, den nutzen wir für den Encoder. PD1 ist frei gewählt, darauf stimme ich die Software ab.

Beide Pins müssen als Input mit PullUp geschaltet werden, aber das müsste ja schon in der Software so eingestellt sein.

Versuch mal die folgenden Code-Teile in dein Programm einzubauen:
Such mal den Bereich Interrupt Vectors (ganz vorne) und schreibe anstelle "reti" "rjmp ExtInterrupt0".
Code:
.org 1   ;*** Extern0 Interrupt ***
   rjmp ExtInterrupt0
Im SRAM-Bereich (.dseg) folgende Variable definieren:
Code:
QuadEncoder:  .byte 1
In der Routine SystemInit folgendes einfügen:
Code:
   rcall InitPorts          ; Ports initialisieren
   rcall InitRegisters      ; Register initialisieren

   [COLOR=DarkRed]rcall InitExtInterrupt0
   sei                       ; SetEnableInterrupt

   ldi RegA, 1
   sts QuadEncoder, RegA[/COLOR]
Hier die eigentlichen Routinen:
Code:
InitExtInterrupt0:

   in RegA, MCUCR          ; Sense Control von INT0 einstellen
   sbr RegA, 1<<ISC01      ; fallende Flanke
   cbr RegA, 1<<ISC00
   out MCUCR, RegA

   in RegA, GICR           ; GeneralInterruptControlRegister
   sbr RegA, 1<<INT0       ; INT0 setzen
   out GICR, Reg1

ret


ExtInterrupt0:
   push RegA               ; RegA auf den Stack
   in RegA, SREG
   push RegA               ; SREG auf den Stack


   sbic PIND, PD1          ; Encoder an PD1 (Bei DIP Package ist das Pin11)
   rjmp extint0_up

   ;************************************************
   ;*** Runterzählen *******************************
   lds RegA, QuadEncoder
   tst RegA
   breq extint0_80         ; wenn 0, dann 80 einstellen
   dec RegA                ; sonst dekrementieren
   sts QuadEncoder, RegA   
   rjmp extint0_end

extint0_80:                ; 80 einstellen
   ldi RegA, 80
   sts QuadEncoder, RegA
   rjmp extint0_end

   ;************************************************
   ;*** Hochzählen *********************************
extint0_up:
   lds RegA, QuadEncoder
   cpi RegA, 80
   brsh extint0_0          ; wenn 80 oder höher, dann 0 einstellen
   inc RegA                ; sonst inkrementieren
   sts QuadEncoder, RegA
   rjmp extint0_end

extint0_0:                 ; 0 einstellen
   ldi RegA, 0
   sts QuadEncoder, RegA


extint0_end:
   pop RegA                ; SREG und RegA vom Stack holen
   out SREG, RegA
   pop RegA
reti
Es kann sein, dass du noch durch Prellen des mechanischen Encoders Probleme hast, das muss man aber erst mal ausprobieren.
Hoch- und Runterzählen kann noch vertauscht sein, das hängt davon ab, wie du den Encoder anschließt.

Den "Wert" des Encoders kannst du irgendwo in deinem Programm abfragen, zum Beispiel so:
Code:
   lds DisplayNumber, QuadEncoder
Den Code konnte ich leider nicht austesten, den habe ich so aus dem Kopf raus geschrieben. Es könnte also sein, dass der nicht sofort läuft.

Versuche die Programmteile mal in dein Programm einzubauen, wenn du nicht damit zurechtkommst, schick mir nochmal deine aktuellste Version, dann kann ich das machen.

Gruß
Dirk
 
Puhh, nun komm ich ganz arg ins schwitzen!

Der Decoder wird, wenn ich das richtig verstanden habe, beim Interrupt abgefragt.
Also garnicht interessant WO ich die Abfrage rein baue, oder ?
Die Vorherige Abfrage also welcher Pin gedrückt wird, muss übersprungen werden?!
Abfrage, Mainloop , taste-pin0-gedrueckt .... kein Durchblick mehr :-(

.dseg und .org ist klar, die eigendliche Routine hab ich ans Ende geschrieben,
die Übergabe von Quadencoder zu LED-Display ist auch klar, ich komme mit der "ehemaligen" Abfrage nicht klar, weil die muss ja übersprungen werden.

Also im Moment habe ich einen (hoffentlich nur kurzzeitigen) Black Out :confused:
 
Keine Panik ;)

Die Abfrage des Encoders erfolgt in der Interruptroutine, die du einfach wie eine "normale" Routine in das Programm (Codesegment) einbauen kannst. Füge einfach die beiden Routinen
InitExtInterrupt0 und ExtInterrupt0 nach dem ret der Routine Mainloop ein.

Deine vorige Tastaturabfrage benötigst du jetzt nicht mehr. Du fragst jetzt direkt die Variable QuadEncoder ab. (1) Du könntest Dir zum Beispiel den Inhalt der Variablen in ein anderes Register abspeichern und prüfst dann immer, ob sich QuadDecoder ändert. Bei einer Änderung kannst Du dann die Anzeige und den PLL-Port aktualisieren.

Ich sehe noch ein bisschen ein Problem darin, dass der Encoder zu sehr prellt, dann muss man ggf. noch etwas Programmcode zusätzlich spendieren.

Um den Encoder einfach mal austesten zu können, schreibe ich dir einen Programmteil, der das macht, was ich oben unter (1) beschrieben habe. Die Ansteuerung der LED-Anzeige hat ja soweit funktioniert?! Heute komme ich aber nicht mehr dazu, ich mache das dann morgen.

Bis dann,
Dirk

 
So, das Programm zählt runter, doch in die andere Richtung (hoch) tut sich jedoch nichts!
Auch nach der 1 kommt die 80, passt also soweit ;)
Könnte es sein dass ich einfach nur das DigiPoti falsch herum angeschlossen habe?

Allerdings der Durchblick fehlt mir noch: Interrupt!
Die Routine wird also bei jedem Interrupt aufgerufen?! Wenn die Routine ausgeführt wurde, geht es dort weiter wo der Interrupt unterbrochen hat?
Bringt nicht jede dortige Routine den Timer durcheinander (Wird ja nicht in meinem Projekt gebraucht, Neugierde)


Kuddel-Muddel-Code im Anhang :eek:
 

Anhänge

  • assembler.zip
    13,1 KB · Aufrufe: 3
Du musst das eine Signal des Encoders an PD1 (Pin 11 bei DIP-Package) und das andere Signal an PD2 (=INT0, Pin 12 bei DIP-Package) anschließen.

Der Encoder liefert zwei Rechtecksignale, die um 90° zueinander phasenverschoben sind. INT0 wird bei fallender Flanke am Pin PD2 ausgelöst. Drehst du den Encoder zum Beispiel rechts herum, wird ein Interrupt bei den roten Pfeilen ausgelöst, links herum bei den blauen Pfeilen. Bei roten Pfeilen ist PD1 immer high, bei blauen Pfeile immer low. So kann man also die Drehrichtung erkennen.


encoder.gif


Es sieht so aus, als wäre bei dir PD1 immer auf low. Kannst du nochmal prüfen, ob der Encoder richtig angeschlossen ist?

Signal A -> PD1
Signal B -> PD2
GND -> GND

Bitte mal zum schnellen Testen folgendes in der Routine SystemInit einfügen:

Code:
   ;************************************************
   ;*** Hier noch allg. Funktionen *****************
   rcall InitPorts          ; Ports initialisieren
   rcall InitRegisters      ; Register initialisieren
   rcall InitExtInterrupt0
   sei                       ; SetEnableInterrupt

   ldi RegA, 1
   sts QuadEncoder, RegA

[B][COLOR=DarkRed]TesteEncoder:
   lds DisplayNumber, QuadEncoder
   rcall leddisplay
   rjmp testeencoder[/COLOR][/B]
Die Routine wird also bei jedem Interrupt aufgerufen?! Wenn die Routine ausgeführt wurde, geht es dort weiter wo der Interrupt unterbrochen hat?
Bringt nicht jede dortige Routine den Timer durcheinander (Wird ja nicht in meinem Projekt gebraucht, Neugierde)
Ja, jedesmal bei einer fallenden Flanke am Pin PD2. Dein Programm wird dann kurz unterbrochen und wenn die Interruptroutine fertig ist, wieder an der Stelle fortgesetzt, wo zuvor unterbrochen wurde. Du meinst mit Timer die Routine Pause100ms? Wenn die Funktion Pause100ms unterbrochen wird, verlängert die sich natürlich, aber da das Ereignis INT0 selten auftritt, merkt man das nicht besonders. Pausen lassen sich auch schön durch Timerinterrups realisieren. Aber eine Pause benötigst du ja jetzt eigentlich nicht mehr, es könnte höchstens sein, dass man noch etwas wegen Prellen des Encoders machen muss.

Gruß
Dirk
 
Hallo Dirk!

Ich habe dein Testproggy erfolglos eingebaut. Nachdem sich dann garnichts mehr tat, habe ich mal das DigiPoti nachgemessen!
Es ist gar keins!!!
Dieses "Gerät" beinhaltet bloss 2 Taster, die je nach Richtung einmal kurz auf Masse gelegt werden :eek:
Würde also an der ersten Version der Tastenabfrage (PD0 = up / PD1 = down) funktionieren.
Das werde ich heute abend mal austesten ....

Ich werde die Tage aber richtige Encoder bestellen, denn das Prinzip gefällt mir irgendwie.

Also unterbrechen wir hier die Arbeit noch mal kurz, und machen weiter wenn meine Hardware vollständig ist.

Bei der Interruptprogrammierung und Timer meinte ich zB "Störungen" an der seriellen Schnittstelle, Uhrzeitabweichungen usw usw, also garnicht mal die Pausenfunktion.

Bis später
Michael
 
Hallo Michael,

Also unterbrechen wir hier die Arbeit noch mal kurz, und machen weiter wenn meine Hardware vollständig ist.
ja, kannst mich ja informieren, wenn du die Hardware hast und weiter testen möchtest.

Bei der Interruptprogrammierung und Timer meinte ich zB "Störungen" an der seriellen Schnittstelle, Uhrzeitabweichungen usw usw, also garnicht mal die Pausenfunktion.
Die seriellen Schnittstellen (UART, SPI) und die Timer des AVR erhalten ihren Takt direkt oder über einen entsprechenden Vorteiler vom Systemtakt. Es läuft also alles normal weiter, wenn eine Interruptroutine ausgeführt wird. Du musst nur zum Beispiel dafür sorgen, dass ein via serieller Schnittstelle empfangenes Byte rechtzeitig "abgeholt" wird, sonst wird es eventuell durch ein nachfolgendes Byte überschrieben, aber dafür musst du ja auch sorgen, wenn keine Interrupts auftreten.

Gruß,
Dirk
 
Sooooo, ich hab eins!
Aber entweder es ist wieder ein falsches, oder im Proggy ist ein Wurm drinn.
Es zählt nur abwärts, egal in welche Richtung ich drehe.

Das Poti hat wiederrum nur 3 Anschlüsse und 20 Rast-Stellungen. PD1 und PD2 habe ich auch schon getauscht, ohne dass sich etwas verändert hat.
Sag mir doch mal worauf ich beim Kauf achten muss (am besten gleich mit Bestellnummer *lach).

Ich bin jetzt schon wieder am überlegen ob ich nicht einfach bei den Up/Down-Tasten bzw diesen "DrehTastern" bleibe ?!
Nur da ist dieses Problem mit der Verzögerung, und irgend ein Wurm ist in der Abfrage auch noch drin:
Wenn ich "UP" drücke, zählt er erst Eins runter, um dann weiter auf zu zählen.
zB Steht auf 10 und ich drück "Up" erscheint erst die 9, 10, 11 usw ....

Mit der Tabelle (PLLTable) habe ich auch noch Probleme, irgendwie muss ich an der ersten Stelle der Tabelle ein "0" hinzufügen, erst dann kommt das richtige Ergebnis heraus.
Wenn ich rückwärts schalte, kommt nach der 1 zwar schon die 80, aber wenn ich dann wieder auf schalte, also von 80 auf 1 kommt 255 ???
 

Anhänge

  • proggy1.zip
    4 KB · Aufrufe: 3
Hallo Michael,

hast du irgendwelche Daten von dem Digitalpoti? Ist es mechanisch oder optisch? Kannst du die Funktion mit einem Meßgerät überprüfen?

PD1 und PD2 habe ich auch schon getauscht, ohne dass sich etwas verändert hat.
Der Interrupt INT0 (Pin PD2) wird ausgelöst, es scheint so, als würdest du kein Signal vom Pin PD1 erhalten. An dem Pin solltest Du einmal messen, ob beim Drehen des Digitalpotis ein Rechtecksignal anliegt. Prüfe mal, ob der Portpin PD1 als Input mit Pullup geschaltet ist.

Bei der Tasterabfrage hast du einen kleinen Fehler, du aktualisierst bei Betätigung erst die Anzeige und dann änderst du DisplayNumber. Wenn du danach DisplayNumber für die PLL-Tabelle verwendest, wird ein falscher Wert am Port für den PLL ausgegeben, zumindest entspricht dieser Wert nicht dem Anzeigewert.

Also folgende Reihenfolge einhalten:
  1. Tasten abfragen
  2. Inkrementieren oder Dekrementieren wenn entsprechende Taste betätigt wurde
  3. Anzeige aktualisieren
  4. PLL Wert ermitteln
Hier sind kleine Routinen, die DisplayNumber inkrementieren und dekrementieren, den Minimalwert und den Maximalwert kannst Du vorgeben. Wird Maximalwert überschritten, wird DisplayNumber auf Minimalwert gesetzt und umgekehrt (Routinen ungetestet).
Code:
;*********************************************************************************
;*  IncDisplayNumber
;*  DecDisplayNumber
;*
;* 
;*********************************************************************************


.equ MAX_DisplayNumber  = 80   ; Hier den Maximalwert und den Minimalwert für
.equ MIN_DisplayNumber  = 0    ; DisplayNumber definieren



IncDisplayNumber:

   cpi DisplayNumber, MAX_DisplayNumber
   brsh incdn_setmin

   inc DisplayNumber
   ret

incdn_setmin:
   ldi DisplayNumber, MIN_DisplayNumber

ret

DecDisplayNumber:

   cpi DisplayNumber, MIN_DisplayNumber
   breq decdn_setmax
   
   dec DisplayNumber
   ret   
   
decdn_setmax:
   ldi DisplayNumber, MAX_DisplayNumber
ret
Ein Tipp zum Simulieren des Digitalpotis: Verbinde eine Taste an PD2 und eine an PD1. Wenn du die Taste an PD2 drückst, muss sich DisplayNumber in eine Richtung ändern, die Richtung ist davon abhängig, ob du die Taste an PD1 gedrückt hältst oder nicht.

Ich weiß jetzt nicht, wie du die Bedienung am liebsten realisieren möchtest, entweder mit Digitalpoti oder mit Tasten. Beides hat Vor- und Nachteile. Ist das Digitalpoti mechanisch, kann es sein, dass man noch entprellen muss. Bei Tastern müsste man noch eine Wiederholfunktion programmieren.

Gruß
Dirk
 
Hallo Dirk.
Das Poti ist auch wieder ein Dreibeiner, also mechanisch mit 20 Rastungen.
Aufgefallen ist mir jetzt beim messen, dass alle 3 Anschlüsse beim drehen kurz Durchgang haben.
Es steht auch leider nichts drauf, kein Hersteller oder sonstige Bezeichnung.

Tja, wenn du mich so fragst, wäre im Moment die Geschichte mit den "Tastern" besser, weil ich einfach Probleme habe, ein verünftiges Poti zu besorgen :mad:

Also ich setz deinen Code nun statt meiner "taste_pin0_gedrueckt" & "taste_pin1_gedrueckt" ein, ja ?!
Habe ich getan, einen Aufruf zu "LEDDislpay" und einen Aufruf zu "Mainloop2" mit hinein...
Geht nicht, sobald ich eine Taste drücke spielt Port C verrückt :confused:
Das bringt mich alles jetzt durcheinander *lach
Sicherlich habe ich nur wieder ne Kleinihkeit übersehen... Schau ich später noch mal rein ....

Bei meinem "alten" Programm habe ich einen Startkanal gewählt, dieser wurde auch richtig angezeigt. Nachdem ich dann in die .db-Zeile noch die 0 an den Anfang stellte, gab PortC auch die 9 Aus (vorher 10) ?! Und wo nimmt PortC die "FF" her, die stehen ja nun garnicht in den Daten???
(An PortC habe ich LEDs angeschlossen, somit kann ich fix ablesen welcher Wert dort ausgegeben wird)
 
Mal noch schnell meine letzte Datei anhängen, wird ja gleich schon wieder hell :eek:

Bei "UP" wechselt die Anzeige zwischen 9 und 10, schaltet beim loslassen der Taste wieder zurück auf 9,
bei "Down" wechselt die Anzeige zwischen 9 und 8, schaltet wieder auf 9.

Die Ausgabe auf PortC habe ich noch garnicht aktiviert bzw getestet.
 

Anhänge

  • proggy1-3.zip
    4 KB · Aufrufe: 2
Incremental Encoder gibt es zum Beispiel von GRAYHILL, ALPS und HP. Ich glaube ALPS (nur mechanische?) gibts auch bei C....d.

Ich würde sagen, du realisierst die Bedienung erst einmal mit Tastern. Wenn das dann alles funktioniert, kannst du ja eventuell auf Incremental Encoder umsteigen.

Ich sehe mir heute dein letztes Programm nochmal an. Bist du dir sicher, dass die Ausgabe der Variablen DisplayNumber auf der 7Segmentanzeige richtig funktioniert? Das würde mir schonmal weiterhelfen.
 
Ich habe nun dein Programm überarbeitet. Ich konnte es leider nicht austesten, es kann also sein, dass wir hier noch ein bisschen debuggen (Fehlersuchen) müssen :rolleyes: zumal der Code schon ein bisschen größer geworden ist :D

Es werden nun Flags (Bits) bereitgestellt, die in bestimmten Zeitintervallen gesetzt werden. Du kannst die Flags im Hauptprogramm abfragen und darauf reagieren. Wie das genau funktioniert, kann ich dir ja noch erklären, aber vielleicht siehst du das ja auch selber im angehängten Programm.

Dann ist ein KeyboardManager programmiert (hier Plus- und Minus-Taste). Tastenfunktion ist wie beim PC, einschließlich entprellen, also
  • sofort reagieren
  • Pause nach erster Betätigung (Zeit einstellbar)
  • Wiederholfunktion (Zeit einstellbar)
ERSTER TEST:
Wir müssen erst einmal prüfen, ob der obere Bereich mit den Flags (Timing) richtig funktioniert. Hierfür habe ich die Routine Mainloop_test1 geschrieben. Die Software flashen, so wie sie ist. Es sollte folgendes passieren:
  1. Anzeigewert wird 2 x je Sekunde erhöht, nach 80 wieder auf 0
  2. LED an PC0 blinkt (500ms Periodendauer)
ZWEITER TEST: (nur wenn der erste Test erfolgreich war)
Wenn sich das Programm so verhält, funktionert der TimerCompareInterrupt0. Sollte es funktionieren, dann alles von Mainloop_test1: bis Mainloop: entfernen, oder einfach mit rjmp Mainloop drüberspringen.

Das Programm sollte nun auf die Tasten Plus und Minus reagieren und den Anzeigewert entsprechend ändern.

Wenn das richtig funktioniert, kann man mit der Ausgabe der Werte am PortC für PLL weitermachen.

Viel Spaß
Dirk
 

Anhänge

  • test0910.zip
    6,1 KB · Aufrufe: 3

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)