Forum: Mikrocontroller und Digitale Elektronik Wie komm' ich an die Daten aus einem 8-Beiner?


von Koko Lores (Gast)


Lesenswert?

Also ich vermute mal, dafür gibt es DebugWire oder so - leider gibt es 
noch keinen Artikel zum Software-Debuggen/Entwickeln.

Jedenfalls möchte ich mal sehen, was der ADC so mißt, aber wie? 
Messergebnis (10bit) vierteilen und per 8-bit PWM woanders ausgeben?

Bei Tastendruck ins EEprom schreiben und dann mit dem Programmieradapter 
auslesen?

von Zacc (Gast)


Lesenswert?

Nun, man kann daten auch seriell an einem Pin ausgeben und dann mit dem 
Scope nachschauen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ach, einen 8-Beiner hast Du da also. Das ist ja schön für Dich.

Du bist Dir offensichtlich nicht im klaren darüber, daß es -geschätzt- 
10E3 verschiedene Controller in dieser Bauform gibt ...

Also: WAS für ein 8-Beiner soll das sein?



(Sonst steht hier die nächste Steinigung mit Glaskugeln an)

von Hannes L. (hannes)


Lesenswert?

Rufus t. Firefly wrote:
> Ach, einen 8-Beiner hast Du da also. Das ist ja schön für Dich.
>
> Du bist Dir offensichtlich nicht im klaren darüber, daß es -geschätzt-
> 10E3 verschiedene Controller in dieser Bauform gibt ...
>
> Also: WAS für ein 8-Beiner soll das sein?

Ach Rufus... Es handelt sich doch um einen Tiny13 aus der AVR-Familie, 
das weiß doch Jeder... - Oder ist Deine Glaskugel etwa schlecht 
gewartet??

>
>
>
> (Sonst steht hier die nächste Steinigung mit Glaskugeln an)

;-)

...

von Peter D. (peda)


Lesenswert?

Hannes Lux wrote:

> Ach Rufus... Es handelt sich doch um einen Tiny13 aus der AVR-Familie,


Also ich habe mich jetzt auf den ATtiny25 als 8-Pinner eingeschossen.

Ein 2.Timer, 8MHz intern und Upgrade bis 8kB Flash kann nie schaden.


Peter

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Tiny15 mit internem ADC ...? :D
Am einfachsten sit es echt das zeug ins EEPROM zu schreiben, mach ich 
meistens so.

von Jörg B. (manos)


Lesenswert?

Peter Dannegger wrote:
> Hannes Lux wrote:
>
>> Ach Rufus... Es handelt sich doch um einen Tiny13 aus der AVR-Familie,
>
>
> Also ich habe mich jetzt auf den ATtiny25 als 8-Pinner eingeschossen.
>
> Ein 2.Timer, 8MHz intern und Upgrade bis 8kB Flash kann nie schaden.
Wow, Du hast upgradefähige Hardware? :)

Aber der OP meinte doch bestimmt AT24C08A oder hatte einfach nur 
Langeweile :)

von Gast (Gast)


Lesenswert?

>Jedenfalls möchte ich mal sehen, was der ADC so mißt, aber wie?

Das ist bei 8-Beinern nicht vorgesehen. Deren ADC mißt einfach so vor 
sich hin, die Daten können aber nicht weiterverarbeitet werden.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Glasigung mit Steinkugeln

von Hannes L. (hannes)


Lesenswert?

Tri-tra-trollalla...

Koko, ich verwende für Sowas eine synchrone serielle Übertragung ähnlich 
dem vereinfachten OWI-Protokoll, aber so langsam, dass es ohne 
Rechenzeiteinbuße im Timer-Interrupt laufen kann. Dabei sende ich ASCII 
(Text), der von einem "Terminal" (AVR mit LCD und 4 Tastern) angezeigt 
werden kann. Das Telegramm umfasst 1 Richtungsbit, 8 Datenbits und eine 
Synchronpause von einer Bitzeit. Es "klappert" mit etwa 1kHz vor sich 
hin, kann also max 100 Zeichen pro Sekunde übertragen.

Ich benutze es auch bidirektional zum Parametrieren kleiner Steuerungen 
mit Tiny13 über das "Terminal". Der eine benötigte Portpin tut dabei 
nicht weh, das Impulsmuster wird vom Timer-Interrupt (400Hz, also 4 
Interrupts pro Bit) nebenbei erzeugt und belastet den AVR kaum.

...

von Jack B. (jackbraun)


Lesenswert?

Laßt den armen Kerl doch in Ruhe, der hat bestimmt was Besseres zu tun,
als mit Euch über 8-Beiner zu spekulieren ;-)

von Koko Lores (Gast)


Lesenswert?

Ist doch völlig egal, was für einer, wenn's ums Prinzip geht..!?
Aber egal: Ihr hattet Euren Glaskugel-Spaß (wobei ich die 'Formulierung' 
wohl eher in einem Computer-Kinder-Forum erwarten würde, als hier von 
den kompetenten), und ich weiß ein bißchen mehr. Die serielle Ausgabe 
per Software ist mir gar nicht konkret in den Sinn gekommen.

Wie schiebt man denn dann das Wert-Bit an das Ausgangs-Bit?

Danke!

von Zacc (Gast)


Lesenswert?

 for i:=1 to 8 do {
  if ((data and 0x80)== 0x80) then portpin:=1
  else portpin:=0;
  shiftleft(data);
  }

Etwa so.

von Koko Lores (Gast)


Lesenswert?

Ah, also das MSB ausgeben, und dann alles nach links schieben. das kann 
ich.
Ich hatte gedacht, man kann das vielleicht direkt auf den ausgangs-port 
operieren. zu kompliziert für mich. egal.
probier ich mal, dankeschön!

von Hannes L. (hannes)


Lesenswert?

> Wie schiebt man denn dann das Wert-Bit an das Ausgangs-Bit?

Das kommt darauf an, welcher Empfänger verfügbar ist.

Wenn Du an UART und PC-Terminal denkst, dann wirst Du an der 
Ungenauigkeit des internen Takt-Oszillators scheitern (oder zumindest 
verzweifeln).

SPI-Master in Software ist kein Problem, braucht aber zwei Portpins.

Ich sende vom Master, also vom kleinen Controller, (durch Pause 
getrennt) 9 Impulse, bei denen die Information im Tastgrad (25% oder 
75%) steckt. Der erste Impuls gibt die Datenrichtung an, legt also fest, 
wer Sender und wer Empfänger ist (in Deinem Fall noch nicht relevant). 
Die anderen 8 Impulse beinhalten die Datenbits. Die Pause sorgt dafür, 
dass der Slave (der Controller mit LCD) weiß, wo ein neues Byte beginnt. 
Der Slave sammelt die Bits ein und gibt sie an das LCD aus. Einige 
vereinbarte Steuercodes erlauben eine saubere Formatierung der Ausgabe.

Du kannst die Ausgabe aber auch so langsam machen, dass Du die Bitwerte 
per Auge mitzählen (und mitschreiben) kannst.

In Deinem Fall (Servoimpulserzeugung) kannst Du den ADC-Wert aber auch 
als "Servoposition" ausgeben und statt des Servos ein Oszilloskop oder 
ein Multimeter mit Tastgrad-Messung (gibts bei Pollin für um die 13 
Euro) anschließen.

Achja, die 8-Beiner AVRs sind nicht alle gleich. In der AT90S-Reihe gibt 
es 8-Beiner mit Hardware-UART. Die können also (Quarz vorausgesetzt) 
recht einfach über RS232 mit dem PC (Terminalprogramm) kommunizieren.

...

von Koko Lores (Gast)


Lesenswert?

Danke!

von Koko Lores (Gast)


Lesenswert?

So kann's gehen:

1
static uint8_t bit;
2
  uint16_t data = 0b1010101010101010;
3
  
4
  if(bit < 16)
5
  {
6
    if(((uint16_t)data<<bit) & 0b1000000000000000)
7
    {
8
      PORTB |= ( 1<<PB0 );       // high
9
    }
10
    else
11
    {
12
      PORTB &= ~( 1<<PB0 );       // low
13
    }
14
  }
15
  else 
16
  {
17
    PORTB &= ~( 1<<PB0 );       // low
18
  }
19
  
20
  if(bit==50)
21
  {
22
    bit=0;
23
    PORTB |= ( 1<<PB0 );       // high
24
  }
25
  else
26
  {
27
    bit++;
28
  }

von Koko Lores (Gast)


Angehängte Dateien:

Lesenswert?

Aha, anscheinend geht der Anhang verloren, wenn man mal auf Vorschau 
klickt..

von Rolf Magnus (Gast)


Lesenswert?

> Ist doch völlig egal, was für einer, wenn's ums Prinzip geht..!?

Na wenn das egal ist, dann nimm einfach den eingebauten UART und schicke 
die Daten als Text an den PC.

von Koko Lores (Gast)


Lesenswert?

Na, wenn das nicht egal ist, hätte es doch gereicht, mich zu fragen, ob 
mein 8-Beiner keinen eingebauten UART hat.
Dann hätte ich direkt 'nein' geantwortet.

Und?

von Hannes L. (hannes)


Lesenswert?

Die Ausstattung der AVRs ist so unterschiedlich, dass es nur wenige 
allgemeingültige Aussagen gibt. Also immer schön konkret benennen um was 
es sich im speziellen Fall handelt. Bezeichnungen wie "mein ATMEL" oder 
"mein ATMEGA", "mein Mega", "mein Tiny" "(m)ein 8-Beiner" mögen zwar 
cool klingen, provozieren aber (berechtigterweise!) zu Widerspruch. Also 
nicht aufregen, wenn es Leute gibt, die solchen Kokolores nicht ganz 
ernst nehmen.

...

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.