mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega16 + MAX187


Autor: Thomas M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich möchte mit meinem ATmega16 einen MAX187 ADU auslesen. Das kann ich
mit dem USART, der MISO/MOSI und einfach über einen belibigen Port
machen, oder? Den USART verwende ich schon für die Kommunikation mit
dem PC und mit der MISO/MOSI kenne ich mich noch nicht aus. Was würdet
ihr mir raten? Ich weiss auch nocht nicht wie ich das ganze mit dem
seriellen ADU realisieren soll. Hättet ihr da mal ein Tip für mich in
dieser Angelegenheit.

Danke!

Autor: Chris Luo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
I have some similar project. I aquired Dout from MAX187 to AT90s2313.
And use UART to display the result into PC. But the output is always
4095. Nothing changes even a littel. I have no I idea what happens.
Could anybody give me a hand?

Autor: Dirk Dörr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas:
Nimm SPI und verbinde den ADC mit dem Controller so wie es im
Datenblatt des ADCs Seite4. Rechts oben (MISO) beschrieben ist.

Dann lies Dir das Kapitel über SPI im Datenblatt des Controllers durch.
Ist nicht sehr schwer.

@Chris
Post your code

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich schlage Dir persoenlich den HW SPI deines Mega16 vor.

MOSI = bleibt offen
MISO = DOUT
SCLK = SLCK
/SS = /CS

Du sendest ueber Mosi 1 Byte, dadurch wird ein Clocksignal zum ADC
gesendet und du hast deine Informationen im SPI Data Register.

Gruß,

Dirk

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

auf Seite 12 siehst du das Zeitverhalten.

Gruß,
Dirk

Autor: Chris Luo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas,

Here is my code.

/*********************************************
This program was produced by the
CodeWizardAVR V1.23.8d Evaluation
Automatic Program Generator
© Copyright 1998-2003 HP InfoTech s.r.l.
http://www.hpinfotech.ro
e-mail:office@hpinfotech.ro

Project :
Version :
Date    : 12.4.2006
Author  : Freeware, for non-commercial use only
Company :
Comments:


Chip type           : AT90S2313
Clock frequency     : 8,000000 MHz
Memory model        : Tiny
External SRAM size  : 0
Data Stack size     : 32
*********************************************/


#include <90s2313.h>
#include <delay.h>
#include <stdlib.h>

#define SCLK  PORTD.2
#define DOUT PIND.5
#define NCS  PORTD.3
#define NSHDW PORTD.4

// Declare your global variables here

void uart_putc(unsigned char data){
  UDR=data;
  delay_ms(10);
}

void uart_puts( char *s){
  while(*s)
    uart_putc(*s++);
}

void uart_puti(const int val){
  char buffer[sizeof(int)*8+1];
  itoa(val, buffer);
  uart_puts(buffer);
}

void init(){
  SCLK = 0;
  NCS = 0;
}

void doSCLK(void){
  SCLK = 1;
  delay_us(50);
  SCLK = 0;
   delay_us(50);
  return;
}


int receive(void){
  int i,data;
  doSCLK();
  data=0;
  for(;DOUT==0;);
  for(i=0;i<12;i++){ doSCLK(); data=(data<<1)|DOUT;}
  NCS = 1;
  return(data);

}



void main(void)
{
  DDRD = 0xdc;      // inital output and input pins
  UCR=0x18;        // initla UART
  UBRR=0x33;
while (1)
      {
      // Place your code here
   init();
   uart_puti(receive());
   UDR = ' ';

      }
}

Autor: Cheffe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, hier mein BASCOM-Schnipsel (MEGA32, 16Mhz) für z.B. 100 Werte.
Anschluß einfach an drei Portpins.

Config Pind.6 = Input
'MAX189_6_DOUT
Config Pind.5 = Output
'MAX189_7_/CS
Config Pind.4 = Output
'MAX189_8_SCLK

Declare Sub Max_wandlung(byval Anzahl_max189_werte As Byte)
Dim Max189_bits(12) As Byte                                 'die 12
eingelesenen Bits
Dim Max189_wert(100) As Integer                             '100
Werte

Portd.4 = 0                                                 'ADC
initialisieren
Portd.5 = 0
Portd.5 = 1
Portd.4 = 1
Portd.4 = 0

call Max_wandlung(100)

endlos:
goto endlos




Sub Max_wandlung(byval Anzahl_max189_werte As Byte)
Local V As Byte
Local U As Byte
Local Dezimal_temp As Integer

For U = 1 To Anzahl_max189_werte
Max189_wert(u) = 0
Portd.5 = 1
Portd.5 = 0

Conversion:
If Pind.6 = 0 Then Goto Conversion

Portd.4 = 1
Portd.4 = 0

For V = 12 To 1 Step -1
Portd.4 = 1
Max189_bits(v) = Pind.6
Portd.4 = 0
Next V
Portd.5 = 1

For V = 11 To 0 Step -1
If Max189_bits(v) <> 0 Then
Dezimal_temp = V
Dezimal_temp = 2 ^ Dezimal_temp
Max189_wert(u) = Max189_wert(u) + Dezimal_temp
End If
Next V
Next U
End Sub

Autor: Dirk Bxxxxx (dirk-)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

im Anhang eine Version mit HW SPI.

Es koennte sein das die Datenbits anders geschoben werden muessen.


(Das Beispiel wurde nicht in Reallife getestet)

Gruß,

Dirk

Autor: Dirk Bxxxxx (dirk-)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mist kleiner Fehler in der SPI Master Init Routine im Anhang die neue
Version

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.