Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Схемы и программы (https://forum.antichat.xyz/forumdisplay.php?f=61)
-   -   помощь по МК AT90S2313 (https://forum.antichat.xyz/showthread.php?t=178350)

NetSter 12.02.2010 20:26

помощь по МК AT90S2313
 
Всем доброго времени суток.
Не буду лукавить и сразу скажу 2 важные вещи:
1) то о чем я прошу помощи является курсовой работой
2) я в этом абсолютно ничего не шарю)

собственно то что нужно сделать:
Цитата:

Разработать принципиальную схему и текст программы для управления бачком проявления фотопленки на микроконтроллере AT90S2313. Алгоритм работы системы следующий:
1. По нажатию на клавишу «Пуск»:
a) открывается вентиль проявителя и наполняется бачок пока не сработает датчик-поплавок 1. Включается электродвигатель, который вращает катушку с пленкой в бачке в течение 4 минут. Останавливается электродвигатель. Открывается вентиль слива проявителя. По сигналу от датчика-поплавка 2 закрыть вентиль слива;
b) открывается вентиль закрепителя и наполняется бачок пока не сработает датчик-поплавок 1. Включается электродвигатель, который вращает катушку с пленкой в бачке в течение 6 минут. Останавливается электродвигатель. Открывается вентиль слива закрепителя. По сигналу от датчика-поплавка 2 закрыть вентиль слива;
c) открывается вентиль воды и наполняется бачок пока не сработает датчик-поплавок 1. Включается электродвигатель, который вращает катушку с пленкой в бачке в течение 7 минут. Останавливается электродвигатель. Открывается вентиль слива воды. По сигналу от датчика-поплавка 2 закрыть вентиль слива;
d) включить лампочку «Проявление закончена».
2. В случае срабатывания датчика-поплавка 3 (не закрылся вентиль) используется система прерываний микроконтроллера и срабатывает звуковой сигнал «Тревоги».
кто чем может помочь?
нужно в протеусе все смоделировать и т.д.
но я в этом вообще не разбираюсь.

MAQUEEN 12.02.2010 21:12

Работа достаточно сложная (как для меня) Вообще я больше по класике : резисторы, конденсаторы....
Но коечто из моих "архивов" есть, смотрим, может чем нибуть поможет, надо же с чегото начинать :) :)
есть 2 схемки сейчас постараюсь выложить, так как весит много.

MAQUEEN 12.02.2010 21:15

первая :
http://img.pixs.ru/thumbs/7/0/6/KBBM...656_460706.jpg
вторая:
http://img.pixs.ru/thumbs/7/1/8/MPBM...205_460718.jpg

+ есть архив с документацией
download
если ище что то найди или придумаю, сразу отпишу.
ПЕРЕМЕСТИТЕ ТЕМУ В "СХЕМЫ И ПРОГРАММЫ"

NetSter 12.02.2010 21:34

спасибо гляну.

Sn@k3 12.02.2010 23:05

меня что смущает, тебе либо двигатель шаговый юзать(+драйвера) либо неизвестный мне http://ru.wikipedia.org/wiki/Вентильный_электродвигате ь (яхзчто и как)

прогу наверное на асме придётся делать т.е бля какже обьяснить



вот из асма тебе пригодится задержка(это типа когда подождать или когда двигатель врубаешь, но там хз может драйвер работать будет, кароче вот):

Код:

;<<<<<<<<<<<<min задержка на минуту
;<<<delay_xs задержка на 2 секунды
min:
    ldi tmp, 30    ;|делаем
    rcall delay_xs  ;|задержку
    dec tmp        ;|на
    breq next      ;|60
    rjmp min        ;|секунд
next: ret            ;|

ldi time, $a0      ; задержка на пол секунды

delay_xs:    ;$ff - 2с    ;$a0 - 0,512с    ;$7 - 43мкс
mov    dly3,time   
d4ms:    mov    dly2,time       
wd2:    mov    dly1,time
wdl:    dec    dly1
    brne    wdl
    dec    dly2
    brne    wd2   
    dec    dly3
    brne    d4ms
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

т.е. вызывая rcall min ты сделаешь задержку на минуту, конечноже это rcall Min можешь прописать несколько раз) сколько пропишешь на столько минут задержит(это уже совсем просто если не сможешь варъировать циклами и прочее, не суть важна)

датчики, я хз какие у тя будут они аналоговые или цифровые, если аналоговые то придётся подрубать АЦП это так:
ADC_IC:
push var1 ;|заносим в стек
in var1,
pop var1 ;|из стека
rcall sravn ;|вызыывем сравнение
ret
sravn:
cp pred_zn, var ;|сравниваемданные
;если больше ;|с ножки АЦП с
brsh motor_on ;|заданным числом
rjmp end
end: ret


кароче типа вытаскивает из ацп сигнал и сравнивает если больше(так у меня у тебя по другому наверное) то переходит на подпрограмму мотор.

если цифровые датчики(хз не работал, сам новичок) то просто там я думаю их к ножке подрубаешь и типа сигнал какойто в виде числа будет - хз

лампочку врубать я думаю типа какойнить светодиод и врубается он просто подав еденицу на ножку типа или подав число на весь порт типа 0001 000 типа того.




кароче у тебя есть две проблемы: нарисовать свою электрическую схему и сделать программу, активно собирай схему т.к. основное это) без неё не будет проги и потом утверди схему у препода потом тока за прогу садись.

NetSter 12.02.2010 23:18

Sn@k3 спс.
буду думать.
да, действительно, сначала важно схему утвердить.

TR0J@N 12.02.2010 23:49

В каком виде должен быть результат, ну насчёт реализации всё в протиусе потяно, а насчёт кода (вам нужно "разжованный" asm !?) если нет то можно накодить на avr basic (pascal,c++)

NetSter 13.02.2010 01:52

ну как бы на асме все предыдущие студенты делали (смотрел примеры других вариантов)
но думаю это не принципиально.
за код хз будут ли дрюкать)

POS_troi 13.02.2010 02:52

http://img193.imageshack.us/img193/9122/kurss.png

Вдруг забредут однокурсники - пусть будет завидно ;)

P/S/ По просьбе ТС пока не выкладываю полную схему.

Вот все равно, для меня остается загадкой этот пункт

Цитата:

2. В случае срабатывания датчика-поплавка 3 (не закрылся вентиль) используется система прерываний микроконтроллера и срабатывает звуковой сигнал «Тревоги».
Технически он как-то не вяжется:

1. Причем тут поплавок? Концевик на вентили еще пойму но поплавок не в какую дыру

2. Какое ёпт прерывание использовать для него если думать что там поплавок (если думать что концевик на закрытие то прерывание нафик не нужно ну или если оч хочется то INT0)?

Цитата:

INT0addr ; External Interrupt Request 0
INT1addr ; External Interrupt Request 1
ICP1addr ; Timer/Counter1 Capture Event
OC1addr ; Timer/Counter1 Compare Match
OVF1addr ; Timer/Counter1 Overflow
OVF0addr ; Timer/Counter0 Overflow
URXCaddr ; UART, Rx Complete
UDREaddr ; UART Data Register Empty
UTXCaddr ; UART, Tx Complete
ACIaddr ; Analog Comparator
Если считать что там поплавок то получается что только по прерыванию таймера - по типу

- Слили Проявитель

- начали наливать фиксаж (а что? мы не можем поплавком проверить закрыт ли клапан) - Ждем 10 секунд

- если поплавок не отозвался значит фиксаж утекает через глючный клапан и пофигу что течет он в проявитель за 100$ литр, крепче будет ёпт.

Что вообще курнул препод - когда составлял задание?

Sn@k3 13.02.2010 12:07

Цитата:

Сообщение от POS_troi
INT0addr ; External Interrupt Request 0
INT1addr ; External Interrupt Request 1
ICP1addr ; Timer/Counter1 Capture Event
OC1addr ; Timer/Counter1 Compare Match
OVF1addr ; Timer/Counter1 Overflow
OVF0addr ; Timer/Counter0 Overflow
URXCaddr ; UART, Rx Complete
UDREaddr ; UART Data Register Empty
UTXCaddr ; UART, Tx Complete
ACIaddr ; Analog Comparator

п.с. эта таблица для другого МК, но посмотри для своего таблицу прерываний и по аналогии сделай так
немного не так)))
включая то что у тебя датчики аналоговые будут стопудова т.к. дешовые, то вот процентов на 90 будет такое: )

Код:

;КОД
.CSEG
;Прыжки по прерываниям

.org 0
    rjmp RESET ; Reset Handler
    rjmp EXT_INT0 ; IRQ0 Handler
    ;rjmp EXT_INT1 ; IRQ1 Handler
    ;rjmp TIM1_CAPT ; Timer1 Capture Handler
    ;rjmp TIM1_COMP ; Timer1 compare Handler
    ;rjmp TIM1_OVF ; Timer1 Overflow Handler
    ;rjmp TIM0_OVF ; Timer0 Overflow Handler
    ;rjmp SPI_STC; ; SPI Transfer Complete Handler
    ;rjmp UART_RXC ; UART RX Complete Handler
    ;rjmp UART_DRE ; UDR Empty Handler
    ;rjmp UART_TXC ; UART TX Complete Handler
    rjmp ADC_IC ; ADC Conversion Complete Interrupt Handler
    ;rjmp EE_RDY ; EEPROM Ready Handler
    ;rjmp ANA_COMP ; Analog Comparator Handler

;Начало программы
RESET:
;<<ИНИЦИАЛИЗАЦИЯ>>
;отключение WatchDog :
    ldi    rgn,$18   
    out    WDTCR,rgn   
    ldi    rgn,$10
    out    WDTCR,rgn
   

;Установка вершины стека
;на конец ОЗУ
    ldi    rgn,HIGH(RAMEND);начало стека
    out    SPH,rgn           
    ldi    rgn,LOW(RAMEND)   
    out    SPL,rgn   

;Разрешение прерываний
    sei

надеюсь на асме прога?) :D


п.с. вот твоя кнопка пуск както так будет выглядеть:

Код:

EXT_INT0: ;кароче типа заносим какоето число на  порт, тут можешь описать не для одного Б как у меня а для скольки хочешь) кароче любой код
      LDI    R16,127        ; переведи 127 в двоичную узнаешь какое число пихается) и какие ножки вкл
  OUT    OCR1BL,R16
ret


POS_troi 13.02.2010 15:40

Цитата:

п.с. эта таблица для другого МК, но посмотри для своего таблицу прерываний и по аналогии сделай так
немного не так)))
Таблицу взял из AvrStudio 4

Код:

;***** THIS IS A MACHINE GENERATED FILE - DO NOT EDIT ********************
;***** Created: 2009-02-04 13:23 ******* Source: AT90S2313.xml ***********
;*************************************************************************
;* A P P L I C A T I O N  N O T E  F O R  T H E  A V R  F A M I L Y
;*
;* Number            : AVR000
;* File Name        : "2313def.inc"
;* Title            : Register/Bit Definitions for the AT90S2313
;* Date              : 2009-02-04
;* Version          : 2.31
;* Support E-mail    : avr@atmel.com
;* Target MCU        : AT90S2313
;*
;* DESCRIPTION
;* When including this file in the assembly program file, all I/O register
;* names and I/O register bit names appearing in the data book can be used.
;* In addition, the six registers forming the three data pointers X, Y and
;* Z have been assigned names XL - ZH. Highest RAM address for Internal
;* SRAM is also defined

%program files%\Atmel\AVR Tools\AvrAssembler2\Appnotes\2313def.inc

Цитата:

дешовые, то вот процентов на 90 будет такое: )
Откуда коду выдрал? Причем тут АЦП? Чем оно должно помочь ТС?

Цитата:

LDI R16,127 ; переведи 127 в двоичную узнаешь какое число пихается) и какие ножки вкл
Никакие! ибо OCR1BL это регистр таймера а если даже и выдать 127 в порт то открыли мы все клапаны да еще и двигателем помешали все =)))


Цитата:

вот твоя кнопка пуск както так будет выглядеть:
Тратить целый ИНТ0 на какуюто кнопку Пуск? Жестко! Лучше уже в главном цикле проверять
Код:

Main:
SBIC        PINB,0        ; пока не Жмакнули Пуск торчим тут.
RJMP Main       

;<Если нажато Пуск выполнится тутошний код >
;<>


Sn@k3 13.02.2010 16:50

Цитата:

Сообщение от POS_troi
1 Откуда коду выдрал? 2 Причем тут АЦП? 3 Чем оно должно помочь ТС?


бляяя ты спорить пришел?
1)моя разработка
2)узнай сначало что такое АЦП(аналогово-цифровой преобразователь, надеюсь он есть в контроллере, иначе покупаешь датчики свои не аналоговые а цифровые это раз, что дороже и что препод скажет иди лесом)
3)тем что читай 2

Sn@k3 13.02.2010 16:53

Цитата:

Сообщение от POS_troi
Тратить целый ИНТ0 на какуюто кнопку Пуск? Жестко! Лучше уже в главном цикле проверять
Код:

Main:
SBIC        PINB,0        ; пока не Жмакнули Пуск торчим тут.
RJMP Main       

;<Если нажато Пуск выполнится тутошний код >
;<>



обоснуй свои слова насчет внешних прерываний 0_о это лучшие из прерываний, ты вообще это понимаешь?

Sn@k3 13.02.2010 16:59

п.с. нету АЦП у тебя, значит берёмс цифровые всякие там датчики.

вот таблица прерываний твоя:

Код:

Address Labels    Code            Comments

 $000              rjmp RESET      ; Обработка сброса

 $001              rjmp EXT_INT0  ; Обработка IRQ0

 $002              rjmp EXT_INT1  ; Обработка IRQ1

 $003              rjmp TIM_CAPT1  ; Обработка захвата таймера 1

 $004              rjmp TIM_COMP1  ; Обработка совпадения таймера 1

 $005              rjmp TIM_OVF1  ; Обработка переполнения таймера 1

 $006              rjmp TIM_OVF0  ; Обработка переполнения таймера 0

 $007              rjmp UART_RXC  ; Обработка приема байта

 $008              rjmp UART_DRE  ; Обработка освобождения UDR

 $009              rjmp UART_TXC  ; Обработка передачи байта

 $00a              rjmp ANA_COMP  ; Обработка аналогового компаратора

.....

http://www.msevm.com/files/at90s2313.htm

POS_troi 13.02.2010 17:57

Цитата:

2)узнай сначало что такое АЦП(аналогово-цифровой преобразователь, надеюсь он есть в контроллере, иначе покупаешь датчики свои не аналоговые а цифровые это раз, что дороже и что препод скажет иди лесом)
Цитата:

п.с. нету АЦП у тебя, значит берёмс цифровые всякие там датчики.
Какой нах АЦП? какие нах Цифровые датчики? В данном ТЗ нех вообще преобразовывать - поплавки являются нормально разомкнутой контактной группой (кнопка ёпт) сделал подтяжку на VCC и парси задавку на массу.

Цитата:

бляяя ты спорить пришел?
Да. пришел. А ты против?

Цитата:

обоснуй свои слова насчет внешних прерываний 0_о это лучшие из прерываний, ты вообще это понимаешь?
Уже обосновывал

Цитата:

Тратить целый ИНТ0 на какуюто кнопку Пуск? Жестко!
Внешке всегда можно найти лучшее применение.

Цитата:

вот таблица прерываний твоя:
Это из даташита а в студии та что я указал (вот такой вот парадокс)

З.Ы. Нех меня упрекать в незнании Аналога и Цифры, поумерь пыл

NetSter 13.02.2010 19:02

ребят, давайте жить дружно.

POS_troi 13.02.2010 19:39

Цитата:

ребят, давайте жить дружно.
В споре рождаются, истинно гениальные решения ;)

Sn@k3 13.02.2010 20:08

ну так и сказал что надо будет сделать сливной бачок как в унитазе :D не заметил слово-поплавок, увидел тока датчик) конечно же подумал что ДАТЧИК нужен) а не....
значить спортиь? спроси надо это мне?

кстати, что значит из даташита ты взял таблицу прерываний?) я увидел только что там инклудится файлик в котором указаны адресса всей переферрии и прочего)
таблицу ты сам указываешь. кароче забей)


и ещё)) то что стоит после ; - типа комментарий) какбы чисто мусор никакой информации не несёт, у тя там кусок приведённый.

POS_troi 13.02.2010 20:37

Цитата:

кстати, что значит из даташита ты взял таблицу прерываний?) я увидел только что там инклудится файлик в котором указаны адресса всей переферрии и прочего)
таблицу ты сам указываешь. кароче забей)
Неа не забью =))

дело в том что какраз в том инклуденом файле Присвоены названия для прерываний но если ты в AVR студии попытаешся использовать те прерывания которые дал то студия при компиляции матюгнетня на то что данное название ничему не присвоено.

Короч мораль в том что не всегда ДатаШит есть хорошо и иногда следует смотреть в апноут =)

Кстати Кнопку Пуск на прерывание вешать есть смысл только в том случае - если хочеш врубать и вырубать девайс одной кнопкой , короч в SLEEP контроллер загонять (Hi-Tech типо ;) )

Цитата:

у тя там кусок приведённый.
И не должно - как таковое =)

2NetSter

Вот видиш, у нас (в бывшем союзе) народ такой - пока не погавкаемся, общего знаменателя не достигнем

Sn@k3 13.02.2010 23:10

Цитата:

Сообщение от POS_troi
Неа не забью =))

дело в том что какраз в том инклуденом файле Присвоены названия для прерываний но если ты в AVR студии попытаешся использовать те прерывания которые дал то студия при компиляции матюгнетня на то что данное название ничему не присвоено.


долго я сидел с таким видом 0_о )))) ахахах!!!
ахахаха!хахахахахахахааа!)) )!!!!!!!!!!! жесть) ахахахах!!!!! и с какого то боку он "матюкнётся" на слово rjmp(посмотри что такое это за команда и как она работает и посмотри что после этой команды) ?)))))) ахаха!!!!)) смотри, это не я придумал))) какбы) меня этому учили не от балды))) чесслова :DDD с каждым словом всё смешнее)


а теперь открой файлик 2323def.inc и посмотри что внутри(*ROFL*) и тепеь подумй ещё раз и скажи что такое "таблица прерываний" :D думаешь я просто так отчитывал лабы чисто по прерываниям?) нененен) просто так говорить не буду))


кароче вывод знаешь немножко но пытаешься навязать свою неправильную политику) просто я сам новичок но какбы я свою работу делал))) в реальном проекте) и как бы вот)

POS_troi 13.02.2010 23:19

открыл и че?

Код:

.equ        INT0addr=$001        ;External Interrupt0 Vector Address
.equ        INT1addr=$002        ;External Interrupt1 Vector Address
.equ        ICP1addr=$003        ;Input Capture1 Interrupt Vector Address
.equ        OC1addr =$004        ;Output Compare1 Interrupt Vector Address
.equ        OVF1addr=$005        ;Overflow1 Interrupt Vector Address
.equ        OVF0addr=$006        ;Overflow0 Interrupt Vector Address
.equ        URXCaddr=$007        ;UART Receive Complete Interrupt Vector Address
.equ        UDREaddr=$008        ;UART Data Register Empty Interrupt Vector Address
.equ        UTXCaddr=$009        ;UART Transmit Complete Interrupt Vector Address
.equ        ACIaddr =$00a        ;Analog Comparator Interrupt Vector Address

а вот твой вариант из даташита

Код:

Address Labels    Code            Comments

 $000              rjmp RESET      ; Обработка сброса

 $001              rjmp EXT_INT0  ; Обработка IRQ0

 $002              rjmp EXT_INT1  ; Обработка IRQ1

 $003              rjmp TIM_CAPT1  ; Обработка захвата таймера 1

 $004              rjmp TIM_COMP1  ; Обработка совпадения таймера 1

 $005              rjmp TIM_OVF1  ; Обработка переполнения таймера 1

 $006              rjmp TIM_OVF0  ; Обработка переполнения таймера 0

 $007              rjmp UART_RXC  ; Обработка приема байта

 $008              rjmp UART_DRE  ; Обработка освобождения UDR

 $009              rjmp UART_TXC  ; Обработка передачи байта

 $00a              rjmp ANA_COMP  ; Обработка аналогового компаратора

Разницу в константах не замечаеш?

мы или думаем о разном или хз.

И того или пишем таблицу и константы как нам хочется или используем то что имеем в *.inc/

Я вообще о том - что наименование констант в даташите и инклуде совершенно разные.

З.Ы. уточнение.

Я привык векторы писать так

Код:

.ORG        INT0addr        ;Обработка прерывания INT0
                RETI
.ORG        INT1addr        ;Обработка прерывания INT1
                RETI
.ORG        ICP1addr        ;Обработка прерывания по захвату таймера 1
                RETI
.ORG        OC1addr                ;Обработка прерывания по совпадению таймера 1
                RETI
.ORG        OVF1addr        ;Обработка прерывания по переполнению таймера 1
                RJMP OVF1
.ORG        OVF0addr        ;Обработка прерывания по переполнению таймера 0
                RETI
.ORG        URXCaddr        ;Обработка прерывания при приеме байта (UART)
                RETI
.ORG        UDREaddr        ;Обработка прерывания при освобождении регистра UDR
                RETI
.ORG        UTXCaddr        ;Обработка прерывания при передаче байта (UART)
                RETI
.ORG        ACIaddr        ;Обработка прерывания аналогового компаратора
                RETI

Вот на этой почве мы и разошлись - разные подходы , короч прав и ты и я , заканчиваем этот бедлам =)

Sn@k3 14.02.2010 01:26

п.с. обычно org обозначают один раз в проге reti тоже) в начале и в конце соответственно) ну а там хз. то что я кидал я даже не обработал...


Время: 20:49