Serielle Schnittstelle und Atmel ATtiny13

KAKTUS
Beiträge: 651
Registriert: Samstag 18. Oktober 2008, 21:12

Re: Probleme mit serieller Schnittstelle und Atmel ATtiny13

Beitrag von KAKTUS » Donnerstag 11. Februar 2010, 17:28

DA Ausgang mit 256Bit Auflösung
hehe, so schnell gehts, ist mir gar nicht aufgefallen, wir wissen ja was gemeint ist
8 Bit Auflösung, 256 Stufen.
stachlige Grüße, Kaktus

tmm
Beiträge: 392
Registriert: Montag 23. Februar 2009, 06:38

Re: Probleme mit serieller Schnittstelle und Atmel ATtiny13

Beitrag von tmm » Donnerstag 11. Februar 2010, 18:05

Hi,

du meinst wohl 256 Stufen, das entspricht dann 8 Bit.

Gruß MM

KAKTUS
Beiträge: 651
Registriert: Samstag 18. Oktober 2008, 21:12

Re: Probleme mit serieller Schnittstelle und Atmel ATtiny13

Beitrag von KAKTUS » Freitag 12. Februar 2010, 00:48

Hier der gewünschte Bascom Code. Hat ich doch auf noch auf meinem PC hier.

Von mir erstellter Bascom Code (neueste Version geprüft) für dieses Board http://www.robotikhardware.de/download/rnmega2560.pdf

Für andere Hardware bitte folgendes Anpassen:
$crystal
$baud
Reference = Internal_1.1

Code: Alles auswählen

'###############################################################
'Mai 2008 by KAKTUS
'Hardware:
'RoboterNetz Board RN-Mega2560 ab Version 1.0
'
'Aufgabe:
'Sammelt Daten der 16 A/D Wandler (10Bit) ein, bildet einen Mittwert
'zwecks Rauschunterdrückung der letzt 1-2Bits
'und gibt Daten über RS232 aus.
'
'##############################################################

'Diese Anweisung setzt die Fusebits automatisch korrekt (Syntax $PROG LB, FB , FBH , FBX )
$prog , 255 , &B11011001 ,                                  'Quarz an / Teiler aus / Jtag aus

$regfile = "m2560def.dat"                                   'Controllertyp
$hwstack = 82                                               '
$framesize = 68                                             '
$swstack = 68                                               '
$crystal = 16000000                                         'Quarzfrequenz
$baud = 256000                                              'RS232 Baudrate

' *** Ausgänge ***
Config Pind.5 = Output                                      'LED zeigt Datenübertragung auf RS232 an
Led Alias Portd.5
Const An = 0
Const Aus = 1

' *** Variablen***
Dim Kanal As Byte                                           'AD Kanal der gemessen werden soll
Dim Adcakt(16) As Long                                      'Array mit 16 Bytes in dem die Messwerte aufaddiert werden
Dim Index As Byte                                           'Zeiger auf Array Speicherplatz
Dim Wert As Word
Dim Spannung As Single
Dim Loop_counter As Long


' *** ADC ***
Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1
' Referenzspannung intern 1,1 Volt
Const Referenzspannung = 1.133                              'tatsächliche Referenzspannung mit gutem Voltmeter am Ref Pin messen!
Start Adc

'*** HAUPTSCHLEIFE ***

Do

' *** Diese Schleife liest die 16 AD Kanäle und bildet einen Mittelwert ***
     For Loop_counter = 1 To 100                            ' Anzahl der Messzyklen zur Bildung eines Mittlwertes auf dem µC
         For Kanal = 0 To 15                                ' Anzahl der ADC Kanäle
               If Kanal > 7 Then Kanal = Kanal + 24         ' Die oberen 8 AD Eingänge erreicht ma nicht mit Getadc(8)..Getadc(15)
                  Wert = Getadc(kanal)

               If Kanal > 7 Then Kanal = Kanal - 24         '
               Kanal = Kanal + 1                            '+1 weil ADC 0-15 aber Array ADCakt 1-16
                     Adcakt(kanal) = Adcakt(kanal) + Wert   'Arrays beginnen bei 1 , hier 1-16
               Kanal = Kanal - 1
         Next Kanal
     Next Loop_counter



' *** Gesammelte Daten über Serielle Schnittstelle ausgeben ***
      Led = An
          For Index = 1 To 16
              Spannung = Adcakt(index) / 100
              Spannung = Spannung * Referenzspannung
              Spannung = Spannung / 1024                    'berechnen der Spannung am AD Eingang
              Print Fusing(spannung , "#.###") ; "|";       'Bitteschön mit einem Vorkomma und drei Nachkommastellen auf RS232 ausgeben
              Adcakt(index) = 0
          Next Index
          Loop_counter = 0
          Print
      Led = Aus
Loop
[/size]

Zugehöriges Profilab Projekt im Anhang!

Nur für privaten Gebrauch.
Dateianhänge
Fichte einfach.prj
(10.01 KiB) 692-mal heruntergeladen
stachlige Grüße, Kaktus

nikolaus10
Beiträge: 17
Registriert: Montag 29. Dezember 2008, 20:48

Re: Probleme mit serieller Schnittstelle und Atmel ATtiny13

Beitrag von nikolaus10 » Mittwoch 14. April 2010, 22:06

Hallo

Ich hab mich mal an dem Program orientiert.
Nur, wie bekomme ich aus dem String , der ja ein Word aus vier Ascii Zeichen darstellt, einen Wert der z.B. durch ein analoges Messgeraet dargestellt werden kann?

Grüsse

KAKTUS
Beiträge: 651
Registriert: Samstag 18. Oktober 2008, 21:12

Re: Probleme mit serieller Schnittstelle und Atmel ATtiny13

Beitrag von KAKTUS » Mittwoch 14. April 2010, 22:13

Hi nikolaus10,

am einfachsten mit :
$VAL
Wandel die Zeichenkette am Eingang $ in einen numerischen Wert, der am Ausgang V ausgegeben wird.
stachlige Grüße, Kaktus

nikolaus10
Beiträge: 17
Registriert: Montag 29. Dezember 2008, 20:48

Re: Probleme mit serieller Schnittstelle und Atmel ATtiny13

Beitrag von nikolaus10 » Donnerstag 15. April 2010, 09:51

Hallo

Schoen Dank fuer die Antwort.
Klappt auch schon fast.
Aber es wird nur der numerische Teil gewandelt,
die Buchstaben nicht.
z.B wird aus 03A4 ein 34 und nicht ein 932.
Haetest du dafuer eine Loesung ?

Gruesse

KAKTUS
Beiträge: 651
Registriert: Samstag 18. Oktober 2008, 21:12

Re: Probleme mit serieller Schnittstelle und Atmel ATtiny13

Beitrag von KAKTUS » Donnerstag 15. April 2010, 09:54

Was für Buchstaben?

Könntest du mal dein Problem mal genauer erklären. In meinem Beispiel kommen keine Buchstaben vor.
Ich sende die Daten in ASCII, also Zahlen von 0-1023 für einen 10 Bit AD-Wandler.
Sieht am Ausgang COM String empfangen so aus: 511|1023|0|455|688|588 ... CR LF

Oder willst du von HEX nach Dezimal wandeln?
Dateianhänge
HEX-DEZ.prj
(1.64 KiB) 435-mal heruntergeladen
stachlige Grüße, Kaktus

KAKTUS
Beiträge: 651
Registriert: Samstag 18. Oktober 2008, 21:12

Re: Serielle Schnittstelle und Atmel ATtiny13

Beitrag von KAKTUS » Donnerstag 8. Juli 2010, 11:17

@Nikolaus10

Projekt eingeschlafen?
stachlige Grüße, Kaktus

nikolaus10
Beiträge: 17
Registriert: Montag 29. Dezember 2008, 20:48

Re: Serielle Schnittstelle und Atmel ATtiny13

Beitrag von nikolaus10 » Sonntag 11. Juli 2010, 11:53

Nein, das Projekt nicht aber ich (wg der Temperaturen ;-)

Im Augenblick schwanken wir zwischen einer EXEL/VBA Loesung und PL.
Einige wollen Excel weil sie das kennen und ich will ein Loesung die sich gut "warten" laesst.
Vor allem bei dem aehnlich gelagerten "Netzteil Thread" scheiden damit DLL Loesungen und selbstgetrickte Treiber aus. Standards sind dann die erfolgreichsten Wege.

Trotzdem vielen Dank fuer die Muehe, fuer die schoenen Loesungsanzaetze und die Inspiration.

Uncle
Beiträge: 32
Registriert: Donnerstag 12. August 2010, 21:32

Re: Serielle Schnittstelle und Atmel ATtiny13

Beitrag von Uncle » Samstag 28. August 2010, 20:00

I have some rs232 hardware (atmega8a), that use 0xFF, 0x00 and other any chars in 8- byte sendins. I wrote .dll (dev.C++) module, and with PLE project (run at 4 -5 kHz) I have one error byte for 4k received, that is enough for me.
Speed is 9600, it is about 20 8-byte messages in second transmitted and 20 received. So I think if it is not possible to reprogram your hardware device, .dll module can receive any char message.

But I have onother problem - I can't find puls generator with more than 1 kHz, so I can send 232 messages only 1k bytes a second (with SendByte). Can I sinchronize with more than 1kHz friequency?

Antworten

Zurück zu „Thema RS232“